Konstantin Matyukhin пишет:
Внутри транзакции отберите селектом индексы записей, подлежащих удалению,
во временную таблицу, а потом удалите записи по отобранным индексам.
Спасибо за совет.
В моём случае оказалось достаточно использовать order by по всем полям
составного индекса.
--
To
r видим что delete несмотря на limit не использовал index
r и 3 строка
r 1) не попала в выборку, то есть не была обработана
r 2) но была удалена
r ---
r итого: 3 строка - зомби
r Получается что нельзя использовать периодическую чистку старых записей
таблицы
r в таком стиле:
r select
r Надеюсь у разработчиков MySQL были весомые причины по разному
r использовать индекс в двух запросах:
r 1) select ... order by F1 limit N
r 2) delete ... order by F1 limit N
r прим: F1 - первое поле составного индекса
Скажем так, у них нет весомых причин непременно использовать его
А когда у тебя delete ... order by ... limit 3 - тебе не надо выделять
память под сами записи. Тебе надо найти те три записи, которые надо
удалить.
Что можно делать через индекс, а можно, увидев, что табличка
небольшая, и напрямую.
Точно также ведет себя и таблица с 5 тыс записей (это в
4 matches
Mail list logo