Выбор «самых высоких» X строк без сортировки - PullRequest
2 голосов
/ 29 марта 2011

У меня есть таблица с огромным количеством данных. Скажем, 10 ГБ строк, содержащих кучу дерьма. Мне нужно выбрать, например, X строк (X обычно ниже 10) с самым высоким amount столбцом.

Есть ли способ сделать это без сортировки всей таблицы? Сортировка этого объема данных чрезвычайно затратна по времени, и я согласился бы с одним сканированием всей таблицы и выбором X самых высоких значений, а остальное оставалось нетронутым. Я использую SQL Server.

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Создайте индекс для amount, после чего SQL Server может выбрать top 10 из этого и выполнить поиск закладок для извлечения отсутствующих столбцов.

1 голос
/ 29 марта 2011
SELECT TOP 10 Amount FROM myTable ORDER BY Amount DESC

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

Является ли индекс полезным или нет, зависит от того, как часто вы выполняете этот поиск.
Вы также можете рассмотреть возможность помещения этого запроса в индексированное представление . Я думаю, что это даст вам наилучшую выгоду / соотношение расходов.

...