Select * vs Select count (*), какой из них быстрее считать строку? - PullRequest
0 голосов
/ 09 января 2020

Моя база данных - MySQL 5.6 и механизм InnoDB.
(Предположим, что приложение использует при использовании select *)

Я обычно использовал select count(*) для подсчета строк.
Но когда Я проверил Duration время в MySQLWorkbench, SELECT * быстрее, чем SELECT COUNT(*).
Это может зависеть от cache, но я не уверен.

На самом деле, какой из них быстрее и лучше?

Ответы [ 4 ]

2 голосов
/ 09 января 2020

select count(*) должно быть быстрее. В некоторых случаях время выполнения сопоставимо.

Но. , ,

  • select * необходимо вернуть все строки в приложение. Каждая строка требует усилия и пробела.
  • select * должен содержать все данные.
  • select count(*) может использовать индекс (если имеется), меньший, чем таблица.

Я не могу вспомнить ни одного нормального случая, когда я ожидал бы, что select * будет быстрее на столе , чем select count(*). Могут возникнуть ситуации, когда оптимизатор запутается.

1 голос
/ 09 января 2020

select count(*) быстрее select *:

select * сканировать все строки:

enter image description here

Если ваша таблица имеет индекс, mysql оптимизатор запросов использует индекс для select count(*):

enter image description here

И select * будет принимать все колонны. как и в этом примере, для получения всех данных потребовалось 67,7 мс ;

однако для select count(*) потребовалось 9,2 мс для подсчета.

1 голос
/ 09 января 2020

SELECT COUNT(*) обычно должно быть быстрее.

Оба запроса должны выполнить одинаковую обработку данных таблицы, чтобы найти совпадающие строки. Но SELECT * также должен отправить все строки обратно клиенту, в то время как SELECT COUNT(*) просто отправляет обратно одно значение.

0 голосов
/ 09 января 2020

Вместо SELECT COUNT(*) используйте SELECT COUNT(one_column_Name)

...