SQL Server 'в' порядке объекта оператора на производительность

Учитывая SQL-оператор:

SELECT * 
FROM MY_TABLE
WHERE SomeNumberField in (0,99999)

Если я могу гарантировать что большинство строк в MY_TABLE иметь SomeNumberField набор к 99 999, и может предположить, что это останется случаем неограниченно долго, это лучше для записи вышеупомянутого запроса как это:

SELECT * 
FROM MY_TABLE
WHERE SomeNumberField in (99999,0)
6
задан James Wiseman 14 June 2011 в 11:03
поделиться

2 ответа

Если у вас есть индекс на SomeNumberField, то это утверждение будет либо просто разбито на два диапазона сканирования индекса, либо обработано как TABLE SCAN / CLUSTERED INDEX SCAN с фильтром.

Последнее более вероятно, при условии, что большинство строк имеют SomeNumberField = 999999

Сканирование диапазона всегда будет выполняться в порядке индекса, независимо от порядка констант в предикате IN.

Время сравнения фильтра пренебрежимо мало по сравнению со временем, необходимым для получения страниц данных.

4
ответ дан 17 December 2019 в 04:46
поделиться

Такой вид оптимизации можно сделать автоматически на оптимизатором SQL при условии, что вы собираете некоторые статистические данные, которые используются оптимизатором. Вы можете использовать инструменты, предоставляемые поставщиком баз данных для этой задачи. Для SQL Server обратитесь к следующей статье на MSDN: http://msdn.microsoft.com/en-us/library/cc966419.aspx

1
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: