С несколькими sql упорядочивание по выражению, все ли побочные порядки выполняются, даже если раннее упорядочение по доказало, что строки не равны? - PullRequest
3 голосов
/ 27 февраля 2012

В SQL-запросе с несколькими предложениями order by все ли они действительно выполняются во время выполнения?

Пример:

select * from my_table
order by field5, field3, field2

Если список после выполнения 'order by' field5 и field3 имеет уникальный список, содержащий только одну комбинацию field5 и field3, выполняется ли 'order by field2' во время выполнения запроса SQL? Или, в моем случае, SQL Server достаточно умен, чтобы увидеть это и пропустить последний шаг?

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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

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

Если вы можете, создание составного индекса, как предлагалось ранее, вероятно, неплохая идея:

create index my_index on my_table (field5, field3, field2);

Я был бы изумлен, если бы реализация внутренней сортировки не сделала оптимизацию, о которой вы говорите, это структуры данных и алгоритмы 101.

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

0 голосов
/ 27 февраля 2012

Скорее всего, да, я не могу понять, как SQL Server узнает, если для последнего столбца есть несколько строк, кроме фактического чтения.

Лучший способ оптимизировать это - добавить индексдля столбцов, которые у вас есть в order by, отсортированные таким же образом.

...