2013-08-16 1 views
2

У меня есть более 10K записей в таблице t1 со столбцом uid.
У меня есть 5 записей с uid='xyz'
Now, которые подходят из 2 лучшеSELECT * vs SELECT * LIMIT (Производительность)

SELECT * FROM t1 WHERE uid='xyz'; 

ИЛИ

SELECT * FROM t1 WHERE uid='xyz' LIMIT 5; 

* Есть только 5 записей с идентификаторами как А *

+4

избегать '*', если вас беспокоит производительность – bansi

+0

Что вы наблюдаете при запуске каждого запроса? – BWS

+0

Это зависит от многого. Собираетесь ли вы использовать все записи или только первую пятерку? – cdhowie

ответ

4

В общем, вы используете limit с предложением order by. В противном случае результаты будут произвольными и могут не повторяться.

Если вы хотите точно записей, используйте limit 5. Если вы хотите все записи, не используйте лимит. Производительность двух должна быть очень, очень и очень схожей, если оба возвращают одни и те же данные.

+0

Я рассматриваю возможную ситуацию, когда 5 результатов помещаются сверху. Будет ли первый запрос искать всю таблицу, а второй остановит поиск, как только будет выполняться условие LIMIT? –

+0

Он остановится, как только найдет нужное количество строк. – Vatev

+1

@GauravSharma Что означает «сверху» означает, что вы ничего не делаете «ЗАКАЗАТЬ»? – Carsten

1

Asumming, как вы объяснили это, есть (абсолютно, конечно) 5 строк, таких как uid='xyz':

  • оба утверждения будут выполнять почти точно так же, если есть индекс uid поскольку MySQL будет легко «видеть», что есть только 5 строк для проверки.
  • Если у вас нет индекса на uid версия LIMIT будет вести себя лучше, так как он сообщит MySQL, чтобы остановить поиск после совпадающей строки 5 я - избежать «тратить время» изучает оставшиеся строки.
0

Еще одна причина не использовать лимит - это всего 5 записей. Может быть, 17 лет спустя.