какой запрос выполняется быстрее для перечисленных ниже SQL запросов - PullRequest
0 голосов
/ 16 января 2020

Таблица сотрудников

  1. select * from Employee where Salary=60000 and FirstName = 'Mark'

  2. select * from Employee where FirstName = 'Mark' and Salary = 60000

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

I. Если в таблице нет индексов, кроме первичного ключа, то какой запрос выполняется быстрее? II. Это зависит от типа данных поиска? как первый int (зарплата), а затем varchar (имя)? изменится ли производительность?

Ответы [ 2 ]

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

SQL является декларативным языком, а не процедурным языком.

То есть запрос SELECT описывает, как должен выглядеть набор результатов , Он не определяет пошаговые операции, используемые для удовлетворения запроса. То, что исполняется, это план выполнения . И это производится оптимизатором после фазы компиляции (и некоторые механизмы баз данных могут даже настроить план выполнения после того, как запрос запущен).

Итак, вы задаетесь вопросом о том, что делает оптимизатор. Для всех практических целей оптимизатор создаст один и тот же план выполнения, используя те же индексы, разделы, статистику таблиц и т. Д.

В одном случае теоретически может быть небольшая разница в производительности , Если, скажем, все зарплаты были 60000, то первое сравнение будет хуже, чем второе - потому что SQL Сервер закорачивает AND вычисления, поэтому он останавливается на первом "ложном".

Я не уверен на 100%, если в оптимизаторе сервера SQL достаточно информации для организации сравнений, принимая во внимание как распределение значений в столбцах, так и сложность сравнений, чтобы сгенерировать оптимальный порядок (это будет это для более дорогих сравнений). Однако сравнения базовых типов выполняются довольно быстро, поэтому даже их обратное изменение будет иметь очень небольшое влияние на производительность.

0 голосов
/ 16 января 2020
  • из плана фактического выполнения равно
  • из статистики io равно
  • из статистики время равно

Я предпочитаю сначала использовать запрос

...