Выбор данных в порядке кластеризованного индекса без ORDER BY - PullRequest
2 голосов
/ 08 июня 2010

Я знаю, что нет гарантии без предложения ORDER BY, но есть ли способы настройки таблиц SQL Server, чтобы они с большей вероятностью возвращали строки в порядке кластеризованного индекса, не указывая ORDER BY каждый раз, когда я хочу выполнить супер-быстрый специальный запрос? Например, поможет ли перестроение моего кластерного индекса или обновление статистики?

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

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

1 Ответ

4 голосов
/ 08 июня 2010

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

В вашем конкретном примере доступ к очень большой таблице accesslog, которая кластеризована IDENTITY для запроса всех строк для определенного UserId, - это last , что вам нужно. Вы хотите иметь индекс по UserId и хотите, чтобы запрос использовал этот индекс. В качестве примечания, таблицы журналов доступа, кластеризованные IDENTITY, обычно не являются хорошим выбором, потому что типичный доступ осуществляется по временному диапазону (доступ между t1 и t2) или по другому атрибуту (по userId, как в вашем примере, или по machineId). , или похожие). Ни один из них никогда не удовлетворяется кластерным индексом в столбце IDENTITY.

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