it-swarm-eu.dev

Pořadí podle sloupce by mělo mít index nebo ne?

Do tabulky jsem přidal indexy, které se používají pro výsledek vyhledávání. Zobrazuji výsledky podle objednávky ASC nebo DESC. Takže tento sloupec by měl mít index nebo ne? Mám v této tabulce ještě 2 indexy. Jak výkon ovlivní vytvořením nebo neprovedením indexu v tomto sloupci?

38
Somnath Muluk

Ano, MySQL může za určitých podmínek použít index ve sloupcích v OBJEDNÁVKU. MySQL však nemůže použít index pro smíšené ASC, DESC pořadí podle (SELECT * FROM foo ORDER BY bar ASC, pants DESC). Sdílení dotazu a prohlášení CREATE TABLE by nám pomohlo odpovědět na vaši otázku konkrétněji.

Tipy, jak optimalizovat klauzuli ORDER BY: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

Upravit 2012-01-21 8:53 AM

V ORDER BY byly otázky týkající se zdroje mého prohlášení o použití indexu se smíšeným ASC/DESC. Z dokumentace ORDER BY Optimization :

V některých případech MySQL nemůže použít indexy k vyřešení ORDER BY, ačkoli stále používá indexy k nalezení řádků, které odpovídají klauzuli WHERE. Tyto případy zahrnují následující:

...

Kombinujete ASC a DESC:

VYBRAT * OD T1 OBJEDNÁVKU key_part1 DESC, key_part2 ASC;

...

Klíčové slovo DESC je také bezvýznamné v CREATE INDEX

Specifikace index_col_name může končit ASC nebo DESC. Tato klíčová slova jsou povolena pro budoucí rozšíření pro určení vzestupné nebo sestupné paměti hodnoty indexu. V současné době jsou analyzovány, ale ignorovány; hodnoty indexu jsou vždy ukládány ve vzestupném pořadí.

29
Aaron Brown

Pro každého, kdo přemýšlí o odpovědi, protože se týká PostgreSQL, je odpověď ano, bude použit index. Podle dokumentace PostgreSQL plánovač dotazů "zváží splnění specifikace OBJEDNÁVKA buď skenováním dostupného indexu, který odpovídá specifikaci, nebo skenováním tabulky ve fyzickém pořadí a provedením explicitního třídění." To znamená, že pokud existuje index, který může plánovač použít, učiní tak, že se po načtení odpovídajících řádků vrátí zpět k řazení.

6
douglasr