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

Drahé úplné skenování tabulky při výběru všech bez podmínky

Další podrobnosti naleznete na níže uvedeném odkazu

https://dev.mysql.com/doc /refman/8.0/cs/table-scan-avoidance.html

příčina úplného prohledání tabulky je uvedena níže

  • Tabulka je tak malá, že je rychlejší provést skenování tabulky, než se obtěžovat hledáním klíčů. To je běžné u tabulek s méně než 10 řádky a krátkou délkou řádků.

  • V klauzuli ON nebo WHERE pro indexované sloupce nejsou žádná použitelná omezení.

  • Porovnáváte indexované sloupce s konstantními hodnotami a MySQL vypočítalo (na základě indexového stromu), že konstanty pokrývají příliš velkou část tabulky a že skenování tabulky by bylo rychlejší

  • Používáte klíč s nízkou mohutností (hodnotě klíče odpovídá mnoho řádků) přes jiný sloupec. V tomto případě MySQL předpokládá, že s použitím klíče pravděpodobně provede mnoho vyhledávání klíčů a že skenování tabulky by bylo rychlejší.

abyste se vyhnuli úplnému skenování tabulky, použijte níže:

  • Pomocí ANALYZE TABLE tbl_name aktualizujte distribuce klíčů pro naskenovanou tabulku.

  • Pomocí FORCE INDEX pro skenovanou tabulku sdělte MySQL, že skenování tabulek je ve srovnání s použitím daného indexu velmi drahé:

    např. SELECT * FROM t1, t2 FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;




  1. Nelze načíst com.mysql.jdbc.Driver

  2. Závažná chyba:operátor [] není pro řetězce podporován

  3. Mohu zaznamenat čas provádění dotazu v PostgreSQL 8.4?

  4. Jak získat datum z databáze MySql do objektu C# DateTime?