sql >> Databáze >  >> RDS >> Mysql

MySQL index zpomaluje dotaz

Zdá se, že article_id je primární klíč pro tabulku článků.

Protože seskupujete podle article_id, MySQL potřebuje vrátit záznamy v pořadí podle tohoto sloupce, aby bylo možné provést GROUP BY.

Můžete vidět, že bez indexu prohledá všechny záznamy v tabulce článků, ale jsou alespoň seřazeny podle article_id, takže není vyžadováno žádné pozdější řazení. Zde lze použít optimalizaci LIMIT, protože je již v pořádku, může se zastavit po získání pěti řádků.

V dotazu s indexem na tag.name místo skenování celé tabulky článků použije index, ale proti tabulce tagů, a začne tam. Bohužel, když to uděláte, záznamy musí být později setříděny podle article.article_id, aby se doplnila klauzule GROUP BY. Optimalizaci LIMIT nelze použít, protože musí vrátit celou sadu výsledků a poté ji seřadit, aby bylo možné získat prvních 5 řádků.

V tomto případě MySQL jen špatně odhaduje.

Bez klauzule LIMIT se domnívám, že použití indexu je rychlejší, což je možná to, co MySQL hádala.



  1. Vytváření názvů tabulek, které jsou vyhrazenými slovy/klíčovými slovy v MS SQL Server

  2. Prozkoumání GUI úložiště dotazů SQL Server 2016

  3. Nemůžete použít dotaz LIKE v JDBC PreparedStatement?

  4. Oracle ekvivalentní MySQL INSERT IGNORE?