Индексы, необходимые при выборе данных в порядке возрастания и убывания - PullRequest
0 голосов
/ 03 марта 2011

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

Нужно ли нам создавать 2 индекса?

Как SQL Server обрабатывает запрос для всех строк в порядке убывания, если существует только присоединяющийся кластеризованный индекс?

1 Ответ

1 голос
/ 03 марта 2011

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

http://msdn.microsoft.com/en-us/library/aa933132%28SQL.80%29.aspx

Прочие сведения ...

Если у вас есть(скажем, возрастание) индекса emp_name, тогда оба нижеприведенных запроса смогут использовать его без дополнительной сортировки.

select x,y,z,a,b,c,emp_name from <table_name> 
order by emp_name desc;

select x,y,z,a,b,c,emp_name from <table_name> 
order by emp_name asc;

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

select x,y,z,a,b,c,emp_name from <tabble_name
order by emp_name asc, a desc.

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

Проверьте эту ссылку.Это особенно относится к Oracle, но я считаю, что SQL Server работает примерно так же.

http://forums.oracle.com/forums/thread.jspa?messageID=4061884

Еще одна полезная ссылка:

http://www.mssqltips.com/tip.asp?tip=1337

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...