Ускоряет ли использование «LIMIT 1» запрос по первичному ключу? - PullRequest
9 голосов
/ 12 декабря 2011

Если у меня есть первичный ключ, скажем, id, и я делаю простой запрос для ключа, например,

SELECT id FROM myTable WHERE id = X

Будет ли он найти одну строку, а затем перестанет выглядеть, поскольку является первичным ключом, или было бы лучше сказать mysql ограничить его выбор с помощью LIMIT 1? Например:

SELECT id FROM myTable WHERE id = X LIMIT 1

Ответы [ 2 ]

7 голосов
/ 12 декабря 2011

Найдет ли он одну строку, а затем перестанет смотреть, поскольку это первичный ключ

Да.

Сканирование таблицы здесь вообще не требуется: это поиск по ключу. Соответствующая строка найдена, и это конец процедуры.

4 голосов
/ 12 декабря 2011

Нет необходимости беспокоиться о такого рода «оптимизации».

Будет выбрана только одна строка - для каждого контракта с уникальным индексом - и база данных сможет очень быстро найти все (1) строки.Это возможно благодаря тому, что базовые структуры, поддерживающие индекс (или первичный ключ), поддерживают быстрый поиск по значению.Нет сканирования таблицы.(Обычно используется вариант B-дерева, но он может быть основан на хэше и т. Д. Я полагаю, что интеллектуальный оптимизатор запросов мог бы также передавать дополнительные подсказки на основе действующего уникального ограничения, но я нене знаю об этом достаточно.)

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