Порядок предложения ANDS in Where для максимальной производительности

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

Но действительно ли порядок AND в предложении WHERE в SQL-заявлении действительно влияет на производительность SQL, которая сильно или уже оптимизирована для этого?

Ответ 1

Это действительно зависит от оптимизатора.

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

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

Ответ 2

Большинство SQL-модулей оптимизированы для выполнения этой работы для вас. Тем не менее, я нашел ситуации, в которых попытка вырезать самую большую таблицу сначала может иметь большое значение - это не повредит!

Ответ 3

Многое зависит от того, как настроены индексы. Если существует индекс, который объединяет два ключа, оптимизатор должен иметь возможность отвечать на запрос одним поиском индекса. В противном случае, если для обоих ключей существуют независимые индексы, оптимизатор может получить список записей, удовлетворяющих каждому ключу, и объединить списки. Если индекс существует для одного условия, но не другого, оптимизатор должен сначала фильтровать, используя индексированный список. В любом из этих сценариев не имеет значения, в каком порядке перечислены условия.

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