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

Když se připojujete k velmi malé/prázdné tabulce, proč MySQL provádí úplné skenování navzdory tomu, že používám LIMIT?

Optimalizátor MySQL nejprve rozhodne o pořadí/způsobu spojení a poté zkontroluje, zda je pro zvolené pořadí spojení možné vyhnout se řazení pomocí indexu. Pro pomalý dotaz v této otázce se optimalizátor rozhodl použít spojení Block-Nested-Loop (BNL).

BNL je obvykle rychlejší než použití indexu, když je jedna z tabulek velmi malá (a neexistuje žádný LIMIT).

U BNL však řádky nemusí nutně přijít v pořadí uvedeném v první tabulce. Proto musí být výsledek spojení seřazen před použitím LIMIT.

BNL můžete vypnout pomocí set optimizer_switch = 'block_nested_loop=off';



  1. Jaké je výchozí pořadí seznamu vráceného z volání filtru Django?

  2. Dotaz oddělený čárkami pro více parametrů v PLSQL

  3. Můj program není schopen ukládat hodnoty v MySQL pomocí mysql connector lib v Pythonu

  4. jak uložit hodnotu enum do DB pomocí Hibernate?