[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: