Индексы SQL Server - возрастание или убывание, какое значение это имеет?

order by case when priority is null then 1 else 0 end, priority
131
задан Joshua Carmody 13 April 2009 в 13:13
поделиться

2 ответа

Это в первую очередь имеет значение при использовании с составными индексами:

CREATE INDEX ix_index ON mytable (col1, col2 DESC);

может использоваться для:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2 DESC

или:

SELECT  *
FROM    mytable
ORDER BY
        col1 DESC, col2

, но не для:

SELECT  *
FROM    mytable
ORDER BY
        col1, col2

Индекс для одного столбца можно эффективно использовать для сортировки обоими способами.

Подробности см. В статье в моем блоге:

Обновление:

Фактически, это может иметь значение даже для индекса одного столбца, хотя это не так очевидно.

Представьте индекс для столбца кластеризованной таблицы:

CREATE TABLE mytable (
       pk INT NOT NULL PRIMARY KEY,
       col1 INT NOT NULL
)
CREATE INDEX ix_mytable_col1 ON mytable (col1)

Индекс в col1 сохраняет упорядоченные значения. из col1 вместе со ссылками на строки.

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

Это означает, что листья индекса фактически упорядочены в (col1,

128
ответ дан 24 November 2019 в 00:18
поделиться

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

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

@Quassnoi предоставляет отличный пример того, когда имеет значение .

8
ответ дан 24 November 2019 в 00:18
поделиться
Другие вопросы по тегам:

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