Vyhledávání nezávislé na diakritice pomocí COLLATE

Pomocí explicitního nastavení collation lze jednoduše udělat vyhledávání nezávislé na diakritice a velkých/malých písmenech:

 SELECT 'Ano!' WHERE ('ABCacžžzř' COLLATE Latin1_General_CI_AI LIKE 'abcáčžzžr' COLLATE Latin1_General_CI_AI) 

Celý tento způsob má několik problematických otazníků, které jsem zatím neprobádal:

  • není mi úplně jasné, jaký je vztah mezi collation a indexy, v mém konkrétním případě nedošlo ke změně execution planu a operace zůstala „Clustered Index Scan“.
  • není mi úplně jasné, proč některé collation fungují, a některé ne – např. „Czech_CI_AI“ mi očekávané výsledky nedávalo.

Update: Czech_CI_AI

Po letech jsem se dopátral, jak je to s Czech_CI_AI. Věc se má tak, že v češtině jsou C-Č, D-Ď, R-Ř, … různá písmena (na rozdíl od A-Á, E-Ě, …) a collation Czech_CI_AI to důsledně rozlišuje (na rozdíl od Latin1_General_CI_AI).

2 thoughts on “Vyhledávání nezávislé na diakritice pomocí COLLATE

  1. Tomáš Jecha

    Ad „není mi úplně jasné, jaký je vztah mezi collation a indexy“:
    Mám za to, že collation definuje řazení i porovnávání. Takže pokud máš shodnou collation na sloupci při vytváření indexu a collation, podle které vyhledáváš, tak to index kvalifikuje k použití range scanu. Pokud se index použil jako index scan, tak bych hledal problém spíš třeba v množství dat nebo jiném vlivu na query. Zkusím to ověřit a sepsat.

    To se mi líbí

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s