Добавление Где предложение занимает меньше времени в SQL - почему?

select count(*) 
from table 

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

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

С помощью where В SQL необходимо выполнить дополнительную работу, поэтому запрос с предложением where является быстрым.

3 ответа

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

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

По сравнению с вашим where оговорка, существует в основном два подхода:

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

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

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

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

Насколько одно решение быстрее другого, зависит от нескольких факторов, таких как:

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

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

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

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

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

Использование условия where ограничивает количество проверяемых строк, поэтому это быстрее!!!

Другие вопросы по тегам