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

Re: mysql select: сочетание order by по составному индексу и limit



rm-f@yandex.ru -> debian-russian@lists.debian.org  @ Thu, 17 May 2007 15:48:27 +0400:

 >>  r> имхо: это потенциальные грабли и ловушка, по крайней мере для новичков

 r> Mikhail Gusarov пишет:
 >> Грабли будут всегда, если не понимать чётко postconditions любого
 >> запроса. Сказано order by - значит будет order by, и ничего больше
 >> не гарантируется: ни как эти order by соотносятся с другими
 >> запросами, и не будет ли этот order by стабильной сортировкой.

 r> Возможно.

 r> Надеюсь у разработчиков MySQL были весомые причины по разному
 r> использовать индекс в двух запросах:

 r> 1) select ... order by F1 limit N
 r> 2) delete ... order by F1 limit N

 r> прим: F1 - первое поле составного индекса

Скажем так, у них нет весомых причин непременно использовать его
одинаково.  А разным использование может быть, например, потому, что в
результате select они выдают все запрошенное (и значит, формируют ответ
перед выдачей - оно у них вроде бы делается именно так), а в результате
delete они удаляют, и ничего никуда не собирают.  Для разных операций
возможны разные обходы второго уровня индекса.

А вообще использовать order by ... limit в delete - решение
категорически непереносимое, и рекомендуется им не пользоваться без
крайней необходимости.  Стандартный (в смысле SQL-92) delete умеет
только where.

-- 
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru

Курицца - не пицца. (Итальянская пословицца)



Reply to: