sql >> Databáze >  >> RDS >> Sqlserver

Mohu optimalizovat dotaz SELECT DISTINCT x FROM hugeTable vytvořením indexu ve sloupci x?

To pravděpodobně není problém indexování, ale problém návrhu dat. Normalizace, abych byl přesný. Skutečnost, že se potřebujete dotazovat na odlišné hodnoty pole, a dokonce jste ochotni přidat index, je silným indikátorem toho, že pole by mělo být normalizováno do samostatné tabulky pomocí (malého) klíče spojení. Poté budou odlišné hodnoty okamžitě dostupné skenováním mnohem menší vyhledávací cizí tabulky.

Aktualizace
Jako řešení můžete vytvořit indexované zobrazení souhrnně podle „odlišného“ pole. COUNT_BIG je agregát, který je povolen v indexovaných zobrazeních:

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. O užitečnosti výrazových indexů

  2. Použijte TYPE_NAME() k získání názvu datového typu na serveru SQL

  3. Java - Jak získat název sloupce v sadě výsledků

  4. Použití sloupce Oracle XMLType v režimu spánku