Я хотел бы знать, почему мой DELETE в таблице MySQL myisam MySQL 5.5 медленнее (мне пришлось отменить его)
Этот SQL занимает менее секунды:
SELECT id FROM backup
WHERE id > 0
AND userId NOT IN
(SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100;
Этот идентичный DELETE не завершился за 2 минуты (я отменил его)
DELETE FROM backup
WHERE id > 0
AND userId NOT IN
(SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100;
Но следующий DELETE - запрос к SAME ROWS (только сейчас выбранный по их первичному ключу напрямую) - занял второе место!
DELETE FROM backup WHERE id IN (12, 33, 34, [... 100 ids...])
EDIT Я также пробовал эту модификацию, используя подзапрос - я смог его после минуты...
DELETE FROM backup WHERE id IN (
SELECT ID FROM (
SELECT id FROM backup WHERE id > 0
AND userId NOT IN (SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100
) a
);
Использование INNER JOIN не работает с DELETE, так как я использую ORDER BY.
Любая идея?
нормально, проблема на самом деле - это подзапрос - соответственно инструкции ORDER BY и LIMIT.
когда я опускаю порядок и ограничиваю и использую следующий запрос, он работает так быстро, как ожидалось (под вторым):
DELETE backup FROM backup
INNER JOIN user ON user.id = backup.userId
WHERE backup.id > 0 AND backup.id < 276 AND (state = 0 OR state IS NULL);