Autor Zpráva
hugo123
Profil *
Ahojte,

mam takuto jednoduchu tabulku: id, dopyt (varchar 255), pocet. Ide o to, ze si pamatam vyhladavacie dopyty a ich pocetnost.

Teraz chcem pre kazde pismeno abecedy napriklad: dopyt LIKE 'A%' vypisat vsetky vyrazy zacinajuce na A, ale zoradene podla najvyssej pocetnosti.

Viete mi prosim poradit ako toto co najefektivnejsie spravit? Ako mam prosim zvolit indexy?

Vopred dakujem velmi pekne.

hugo123
lionel messi
Profil
hugo123:
Ako mam prosim zvolit indexy?
V tomto prípade by som dal indexy 2, konkrétne (dopyt) a (pocet). Vychádzam z článku: Jak psát kód: Databázové indexy vytvářejte při psaní dotazů, profíci možno budú mať iný názor.
hugo123
Profil *
lionel messi:
dakujem, a mam to dat ako 2 samostatne indexy, alebo ako jeden dvojity index?
lionel messi
Profil
hugo123:
mam to dat ako 2 samostatne indexy, alebo ako jeden dvojity index?
Prikláňam sa k dvom samostatným, ešte by som počkal na vyjadrenie niektorého z expertov fóra, nech mi to potvrdí, som len amatér, ale z odkázaného článku mi to tak vyšlo.
Tori
Profil
hugo123:
chcem pre kazde pismeno abecedy napriklad: dopyt LIKE 'A%' vypisat vsetky vyrazy zacinajuce na A, ale zoradene podla najvyssej pocetnosti.
Pokud budete tento dotaz provádět často, tak bych přidala další sloupec typu CHAR(2), kde bude počáteční písmeno. A index na tomto sloupci. Pak použijete snadno dotazy typu SELECT ... WHERE pismeno = "A" nebo SELECT pismeno, COUNT(*) AS pocet ... GROUP BY pismeno ORDER BY pocet DESC, bude to o dost rychlejší než LIKE. Je potřeba nastavit tomuto sloupci správné porovnávání (utf8_slovak_ci), aby se rozlišovaly S a Š apod.
hugo123
Profil *
Tori:
Ok, takze potom dam iba jeden index na stlpec zaciatocneho pismena? Uz ziadny iny?
Tori
Profil
Asi bych dala jeden index přes oba sloupce - začáteční písmeno + počet, v tomto pořadí. Ale nejsem si stopro jistá, musela bych si vygenerovat pár tisíc záznamů a vyzkoušet to (explain select...).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0