Гарантирует ли ключевое слово LIMIT в MySQL порядок возвращаемых данных? - PullRequest
1 голос
/ 21 июня 2009

Я новичок в MySQL, но некоторое время пользовался Oracle. Я немного запутался по поводу ключевого слова MySQL LIMIT. Означает ли это ключевое слово, что порядок возвращаемых данных будет одинаковым при каждом выполнении запроса? Что, если в таблицы, которые влияют на запрос, добавляется больше данных? И как будут упорядочены данные, если не существует предложения order-by?

Ответы [ 3 ]

4 голосов
/ 21 июня 2009

Нет, LIMIT является недетерминированным. Порядок зависит от данных, используемых индексов, внутренних изменений между версиями mysql, порядка данных на диске и т. Д.

Обычно, чтобы избежать этого, обычно вы комбинируете LIMIT с ORDER BY.

2 голосов
/ 21 июня 2009

LIMIT не будет налагать порядок на возвращаемые данные.

Нет гарантии, что лимит будет возвращать один и тот же ордер каждый раз, когда он выполняется, если не используется предложение ORDER BY. Если данные вставлены, это может повлиять на результаты как упорядоченных, так и неупорядоченных результатов.

Если вы пропустите предложение ORDER BY, то в основном дело за базой данных, чтобы определить порядок, и, вероятно, оно основано на том, как таблица проиндексирована. Это изменится со временем, когда таблица будет переиндексирована и / или добавлено больше данных.

1 голос
/ 21 июня 2009

Если вы не укажете ORDER BY, нет никаких гарантий относительно того, какие строки будут возвращены первыми.

Но на практике порядок обычно совпадает с порядком кластеризованного индекса и не меняется между вызовами. Не полагайтесь на это поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...