Re: mysql select: сочетание order by по составному индексу и limit
r> видим что delete несмотря на limit не использовал index
r> и 3 строка
r> 1) не попала в выборку, то есть не была обработана
r> 2) но была удалена
r> ---
r> итого: 3 строка - зомби
r> Получается что нельзя использовать периодическую чистку старых записей таблицы
r> в таком стиле:
r> select ... order by `data_field` limit N;
r> delete ... order by `data_field` limit N;
r> если поле `data_field` - часть составного индекса?
r> так? или это смахивает на ошибку в mysqld 5.0.32-Debian_7-log
Artem Chuprina пишет:
Использовать индексы консистентно никто никому не обещал. Тем более -
частичные. Обещали только соответствие результата запроса его тексту.
Так что никакой ошибки, кроме пользовательской, я тут не наблюдаю.
я тоже не уверен что это баг мускуля,
но все же для получается следующее ( прим: index составной на f1,f2 ):
запрос select ... order by `f1` limit N;
на самом деле выполняется как запрос
select ... order by `f1`,`f2` limit N;
правильно это или нет - не знаю и не берусь спорить
предполагаем что это правильно
а delete ... order by `f1` limit N;
отрабатывает так как будто нет составного индекса
имхо: это потенциальные грабли и ловушка, по крайней мере для новичков
прим: если же эта ситуация хорошо известна и описана - ткните в доки
пожалуйста, уважаемые mysql-профи
P.S. если кому-то интересно, решается так:
s/order by `f1`/order by `f1`,`f2`...`fn`/ и в select и delete,
где f1-fn - все поля, составляющие индекс
или другой способ: стройте 2 индекса: f1 и f1,f2... :(
Reply to: