602SQL-┌plnß dokumentace Index   Tisk  

Pou₧itφ index∙ v dotazech na prefix

Ka₧d² index uspo°ßdßvß zßznamy podle hodnot indexovΘho klφΦe, vzestupn∞ nebo sestupn∞. Je-li indexov²m klφΦem znakov² °et∞zec, pak se pou₧φvß lexikografickΘ uspo°ßdßnφ podle jazyka urΦenΘho v popisu sloupce tabulky.

Nßrodnφ lexikografickΘ uspo°ßdßnφ hodnot klφΦe umo₧≥uje efektivnφ vyhodnocenφ podmφnek na rovnost nebo nerovnost °et∞zc∙ pou₧it²ch v dotazu a takΘ set°φd∞nφ zßznam∙ v odpov∞di na dotaz. Nehodφ se vÜak k optimalizaci dotaz∙ obsahujφcφch podmφnku na prefix. Uva₧ujme Φesk² jazyk a tabulku obsahujφcφ tato data: 'caa', 'czz', 'd', 'cha', 'Ostra', 'Ostrß', 'Ostrava'.

V nßrodnφm lexikografickΘm indexu jsou tyto zßznamy v tom po°adφ, v n∞m₧ jsou v²Üe uvedeny. Pokud by se pou₧il tento index k optimalizaci dotazu sloupec.='c', pak by odpov∞∩ na dotaz obsahovala zßznamu 'caa', 'czz', ale ji₧ nikoli 'cha', proto₧e pr∙chod indexem by skonΦil na zßznamu 'd'. Podobn∞ odpov∞∩ na dotaz sloupec.='Ostra' by obsahovala pouze zßznam 'Ostra', proto₧e zßznam 'Ostrß' by vytvß°enφ odpov∞di ukonΦil a zßznam 'Ostrava' by nemohl b²t nalezen.

Nßrodnφ lexikografickΘ indexy nelze proto pou₧φt pro optimalizaci dotaz∙ na prefix.

K tomu, aby bylo mo₧no efektivn∞ zodpovφdat dotazy s podmφnkami na prefix, je t°eba v tabulce definovat jin² index. Pro sloupec XYZ typu °et∞zec znak∙ dΘlky D je t°eba pou₧φt indexov² v²raz:

CAST(XYZ AS CHAR(D))
Takov² index bude t°φdit zßznamy podle ASCII uspo°ßdßnφ a bude moci b²t proto vyu₧it pro optimalizaci podmφnek na prefixy. Mß-li hledßnφ podle tohoto indexu nerozliÜovat velikost pφsmen (ignorovat case senzitivitu), musφ tomu odpovφdat i indexov² v²raz:
CAST(XYZ AS CHAR(D) COLLATE IGNORE_CASE)

Pokud se n∞kter² °et∞zcov² sloupec tabulky pou₧φvß jak v podmφnkßch s rovnostmi Φi nerovnostmi tak i v podmφnkßch na prefix, pak pro efektivnφ vyhodnocenφ takov²ch dotaz∙ je nutno vybavit tabulku dv∞ma indexy.