Производительность SQL SERVER? - PullRequest
0 голосов
/ 10 сентября 2009

Я присоединился к двум таблицам, каждая из которых содержит более 5000 записей. Я использовал два метода, чтобы присоединиться. В первом запросе я использовал ключевое слово JOIN и дал условие в состоянии ON. Во втором запросе я просто использовал запятую между таблицами и дал условие соединения в предложении WHERE.

Какой из них будет эффективным с точки зрения времени и стоимости ....?

Когда я смотрю в план выполнения, первый запрос занял 61% стоимости для СКАНИРОВАНИЯ ТАБЛИЦЫ и 38% для ХАШ-МАТЧА (ВНУТРЕННЕЕ СОЕДИНЕНИЕ)

Второй запрос занял 69% стоимости для TANLE SCAN и 31% для HASH MATCH (INNER JOIN).

Можете ли вы объяснить мне эту разницу?

Я предполагаю, что Первый эффективен, потому что стоимость сканирования таблицы меньше. Это правильно ...?

Ответы [ 4 ]

1 голос
/ 10 сентября 2009

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

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

что больше

61% of 465

или

69% of 234

??

В этом случае вы можете увидеть, что 69% из 234 будут гораздо «быстрее», чем 61% для 465. Все это относительно общей стоимости запроса.

Будьте внимательны, сравнивая только проценты, потому что вы не знаете, что такое фактическое значение, которое соответствует 100% в обоих случаях ... например, ВСЕГО стоимость выполнения могла бы быть ниже во втором случае.

1 голос
/ 10 сентября 2009

TABLE SCAN означает, что он должен прочитать каждую строку в таблице. Обычно с планами выполнения вы пытаетесь избавиться от сканирования таблицы, используя индексы и т. Д., Где это возможно. Сканирование таблиц, как правило, является основной причиной медленных запросов. (по моему опыту)

Уменьшение в процентах - это только улучшение, если общее время, необходимое SQL для выполнения, уменьшается по сравнению с тем, что было ранее

Например, если первый запрос с немного уменьшенным TANLE SCAN занял 20 секунд вместо 10, то он не так эффективен.

Конечно, если вы хотите оптимизировать свой запрос, есть целый ряд методов, которые вы можете применить, чтобы попытаться улучшить его. (Мастер настройки индексов, Создание индексов (кластеризованных / некластеризованных), Просмотр плана выполнения - определение потенциальных узких мест и т. Д.) *

Оптимизация SQL сама по себе художественная форма

0 голосов
/ 10 сентября 2009

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

  1. Какая версия создает план запроса, который лучше оптимизирован.

  2. Что более легко обслуживать, если код необходимо будет модифицировать позже включить более объединенные (ВНУТРЕННИЕ или НАРУЖНЫЕ) таблицы.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ и предложение WHERE

0 голосов
/ 10 сентября 2009

Определите «эффективный». Если ваша цель - скорость, выберите «показать статистику клиента», выполните оба запроса не менее десятка раз (конечно, в разных окнах запросов) и оцените результаты.

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