Добавление Где предложение занимает меньше времени в SQL - почему? - PullRequest
0 голосов
/ 16 декабря 2018
select count(*) 
from table 

занимает больше времени для выполнения, чем:

select count(*) 
from table 
where x = '1' 
here x is not an index

Используя предложение where, SQL должен проделать дополнительную работу, так почему запрос с предложением where быстрый.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Обычно это происходит потому, что у вас есть индекс, включающий столбец x.

. В общем случае count(*) требует сканирования всех строк или сканирования наименьшего индекса (в зависимости от базы данных).

Для сравнения, с вашим предложением where есть два основных подхода:

  • Сканирование всех строк и сравнение.
  • Поиск значенийв индексе, который удовлетворяет условию.

Второй подход, как правило, намного быстрее первого.

Другие факторы могут вступать в игру.Например, другой процесс может обновлять или вставлять строки, что накладывает блокировки на таблицу или ее части.Это может замедлить другие запросы.Однако, по всей вероятности, причиной является наличие индекса.

0 голосов
/ 16 декабря 2018

Передавая предложение WHERE, вы указываете своей РСУБД, что для поиска результата нужно отсканировать только часть таблицы.Без предложения WHERE всю таблицу необходимо сканировать.Это не значит, что одно решение всегда будет быстрее другого.

То, что одно решение быстрее другого, зависит от множества факторов, таких как:

  • структура таблицы (например, есть ли индекс для столбца в WHEREпункт),

  • размер (количество строк)

  • распределение данных в отфильтрованном столбце

  • точность статистических данных (были статистические данные, недавно вычисленные для этой таблицы, с каким размером выборки, ...)

На основе этих факторов оптимизатор вашей СУБД решит, какой план выполненияследует использовать, что в конечном итоге будет определять производительность запроса.

...