Koukám, že jsi furt nepochopil, kde je v Tvé DB struktuře problém. Příklad byl ZÁMĚRNĚ bez řazení, aby Ti demonstroval, že INDEX NEUMÍ AKCELEROVAT OPERACI DISTINCT. V Tvém dotazu se index použije pouze na řazení, ale práci oproti full table scanu (nebo přesněji sekvenčnímu scanu, protože po nalezení dostatečného počtu hodnot se zastaví) Ti neušetří ani náhodou.
Problém je v tom, že v indexu jsou odkazy na VŠECHNY záznamy. NENÍ to seznam unikátních hodnot. Tedy když máš v tabulce milion záznamů, tak tam máš milion odkazů do primárního souboru. A pokud ten milion záznamů bude mít sto štítků s +- rovnoměrným rozdělením, tak Tvůj dotaz sice použije index, aby si ušetřil řazení, ale pořád ten Tvůj dotaz bude pro DB znamenat projít prvních sto tisíc záznamů indexu, aby těch deset unikátních hodnot našel. Skvělé, že?
Zkus si navýšit počet záznamů, aniž bys navýšil počet různých štítků - čas na dotaz Ti naroste. Btw. to je vidět i na Tvém vygenerovaném plánu, proč je tam asi ten operátor unique, že?
PS: A ano, mimochodem, přesně jsi to vystihl s tím NoSQL: ano přesně toto je důvodem boomu NoSQL databází. Protože když SQL databázi používají lidé, co jí nerozumí a dělají takovéto zprasené DB struktury, tak přechodem na NoSQL databázi jen získají. A typické je, že si myslí, že je to vina těch SQL databází....