Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Мога ли да оптимизирам заявка SELECT DISTINCT x FROM hugeTable, като създам индекс на колона x?

Това вероятно не е проблем на индексирането, а на дизайна на данните. Нормализация, за да бъдем точни. Фактът, че трябва да направите заявка за различни стойности на поле и дори желаете да добавите индекс, е силен индикатор, че полето трябва да бъде нормализирано в отделна таблица с (малък) ключ за свързване. След това отделните стойности ще бъдат достъпни веднага чрез сканиране на много по-малката чужда таблица за търсене.

Актуализация
Като заобиколно решение можете да създадете индексиран изглед върху агрегат от полето „отделно“. COUNT_BIG е агрегат, който е разрешен в индексирани изгледи:

create view vwDistinct
with schemabinding
as select x, count_big(*)
from schema.hugetable
group by x;

create clustered index cdxDistinct on vwDistinct(x);

select x from vwDistinct with (noexpand);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведение в SQL Server 2017

  2. Как да форматирате числа със запетаи в SQL Server

  3. Изберете SQL резултати, групирани по седмици

  4. Най-бързият начин да определите дали записът съществува

  5. SQL точка нотация