Оптимизация запроса GROUP BY - PullRequest
0 голосов
/ 12 марта 2012

Просто пытаюсь оптимизировать SQL-запрос.

SELECT   Code, COUNT(*) 
FROM     tblData 
WHERE    ListID = 380 
GROUP BY Code

Таблица содержит 10 миллионов записей.Таким образом, запрос обычно занимает 4-5 секунд, чтобы найти запись в SQL SERVER 2008 R2.Я нашел другой способ выразить это:

SELECT a.Code, COUNT(*) 
FROM   (  SELECT * 
          FROM   tblData 
          WHERE  ListID = 380 
       ) a 
GROUP BY a.Code

Хотя в моих тестах он дает результаты в одно и то же время.Но мне интересно, будет ли это быстрее предыдущего или наоборот.Есть идеи?

Ответы [ 3 ]

4 голосов
/ 12 марта 2012

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

Не думаю, что вы можете изменить свой запрос, чтобы он работал быстрее. Конечно, вы можете иметь индекс на ListID, но я ожидаю, что он у вас уже есть.

3 голосов
/ 12 марта 2012

Как сказали @cornuz и @Wim, эти два запроса должны быть эквивалентны.

Однако вы можете обнаружить, что наличие индекса из двух столбцов (для ListId, а затем для Code) значительно повысит производительность, поскольку

  1. база данных просто посещает индекс,не стол;и
  2. индекс не должен был бы выполнять дополнительную сортировку, чтобы собрать вместе строки, которые должны быть посчитаны вместе.
0 голосов
/ 12 марта 2012

В Management Studio выберите оба запроса и нажмите «Показать примерный план выполнения».Как только стоимость одного запроса отличается от 50%, у вас есть победитель (и проигравший).

Ваш второй запрос выглядит как результат первого запроса после того, как он прошел Анализатор.Я думаю, что оба будут работать точно так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...