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

MySQL index pro MIN a MAX

SELECT MIN(b), MAX(b) FROM tbl WHERE a = 12;

miluje

INDEX(a, b)

oba sloupce v tomto pořadí.

Dotaz hledá v indexu a = 12 , vezme první (a,b) spárovat a získat MIN(b) a vezme poslední pár, aby získal MAX(b) .

Prohlášení o „nahrazení konstantou“ je matoucí, protože zachází příliš hluboko do podrobností o tom, jak nejprve zjistí, jak provést dotaz (což se stane, že dostane min. a max.), pak pokračuje ve vykonání toho, co zbylo dotaz (nic nezůstalo).

Obecněji je optimální index obvykle ten, který začíná všemi WHERE sloupců ve srovnání s konstantami s = . Poté se to zkomplikuje, takže mi dovolte dát další tip:

"Pokrývající" index je index, který má všechny sloupce uvedené v SELECT (a a b v mém příkladu).

Pardon, nezdá se mi, že bych byl srozumitelnější než manuál.



  1. spočítat 10 nejčastěji se vyskytujících hodnot ve sloupci v mysql

  2. čtení/zápis unicode dat v MySql

  3. Použití klíčů a hodnot pole k vytvoření příkazu sql select

  4. Booleovské pole v Oracle