Myslím, že jsou nějaké problémy s dotazem a samotnou definicí tabulky.
Table.name
je 4K znakový sloupec- Dotaz se řadí podle tohoto sloupce
Třídíte podle sloupce, do kterého ukládáte řetězce. Aby bylo možné třídit podle řetězců, je třeba provést porovnání řetězců. Porovnání řetězců bývá pomalá operace a vzhledem k velikosti sloupce, který používáte, je velmi pravděpodobné, že způsobí znatelný zásah do výkonu.
Nemáme žádný údaj o obsahu vašeho name
a zdá se obtížné vymyslet skutečný název, který by vyžadoval to mnoho postav.
Pokud tento řetězec obsahuje několik částí dat, které se koncepčně liší, možná by měl být sloupec rozdělen do více samostatných sloupců, je-li to možné, a poté podle potřeby normalizován.
Pokud můžete rozdělit obsah tohoto sloupce na několik menších a pak je použít, porovnání řetězců, i když jsou stále drahé, by bylo „rychlejší“ jednoduše proto, že porovnávané řetězce budou výrazně kratší, než jsou nyní.
Další věc, kterou je třeba zvážit, je, zda můžete optimalizovat vyhledávání vyhýbáním se porovnávání řetězců úplně nebo tím, že se vyhnete dotazům, které způsobí úplné prohledání tabulky navzdory skutečnosti, že jste definovali indexy.
Za tímto účelem byste se měli podívat na použití explain
s vaším dotazem, abyste mohli lépe porozumět Plán provádění dotazů
Cituji dokumenty (zdůrazňuji):
Upravit 1
Upřesnili jste, že vaše name
sloupec je ve skutečnosti pro uživatelské poznámky. V tomto případě si myslím, že byste měli zvážit následující (v navíc k tomu, co již bylo zmíněno):
- Přejmenujte sloupec na něco, co odpovídá jeho skutečnému obsahu
- Odeberte index ze sloupce
- Ne ne použít tento sloupec k vyhledávání, řazení nebo k jakékoli jiné operaci, než jen k jeho výběru k zobrazení (bylo by to velmi vzácné, pokud bylo potřeba použít pro něco jiného, IMHO.)
- Volitelně zvažte změnu sloupce na
text
zadejte a nebudete se muset tolik starat o uživatelské eseje zkrácení bez varování (pokud GUI nevynucuje uživateli stejný limit délky vstupu)