Подтвердить что ты не робот

Ли ограничение запроса на одну запись повышает производительность

Ограничит запрос одной результирующей записью, улучшит производительность в большой (ish) таблице MySQL, если таблица имеет только один результат соответствия?

например

 select * from people where name = "Re0sless" limit 1

если есть только одна запись с этим именем? и что, если name был основным ключом/установленным к уникальному? и стоит ли обновлять запрос или будет минимальным выигрыш?

4b9b3361

Ответ 1

Если столбец имеет

уникальный индекс: нет, он не быстрее

неуникальный индекс: возможно,, потому что это предотвратит отправку любых дополнительных строк за пределы первого совпадающего, если таковые существуют

нет индекса: иногда

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

Ответ 2

Если у вас несколько более сложный запрос, с одним или несколькими объединениями, предложение LIMIT дает дополнительную информацию оптимизатора. Если он ожидает совпадения двух таблиц и возвращает все строки, хеш-соединение обычно является оптимальным. Хеш-соединение - это тип объединения, оптимизированный для больших совпадений.

Теперь, если оптимизатор знает, что вы передали LIMIT 1, он знает, что он не будет обрабатывать большие объемы данных. Он может вернуться к loop join.

На основе базы данных (и даже версии базы данных) это может иметь огромное влияние на производительность.

Ответ 3

Чтобы ответить на ваши вопросы в порядке:  1) да, если индекс отсутствует. Запрос завершится, как только он найдет первую запись. снимите ограничение, и он должен выполнять полное сканирование таблицы каждый раз.  2) нет. первичные/уникальные ключи гарантированно уникальны. Запрос должен прекратиться, как только он найдет строку.

Ответ 4

Я считаю, что LIMIT - это что-то сделано после обнаружения набора данных и создания набора результатов, поэтому я не ожидал, что он вообще изменит ситуацию. При создании имени первичный ключ будет иметь значительный положительный эффект, хотя в результате будет создан индекс для столбца.

Ответ 5

Если "имя" уникально в таблице, тогда все же может быть (очень очень минимальный) выигрыш в производительности, поставив ограничение ограничения на ваш запрос. Если имя является первичным ключом, вероятно, его не будет.

Ответ 6

Да, вы заметите разницу в производительности при работе с данными. Одна запись занимает меньше места, чем несколько записей. Если вы не имеете дело со многими строками, это не будет иметь большого значения, но как только вы запустите запрос, данные должны быть возвращены вам, что дорого или обрабатывается программно. В любом случае, одна запись проще, чем несколько.