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

Pochopení indexů více sloupců v dotazu MySQL

Dobrá otázka.

Indexy fungují zleva doprava, takže vaše WHERE kritéria by používala index. Řazení by v tomto případě také využilo index (plán provedení níže).

Z příručky :

Pokud jste měli index s jedním sloupcem (accountid ), místo toho by se použil souborový druh. Váš dotaz tedy těží z tohoto indexu.

Dvousloupcový index

create table t1 (
  accountid tinyint,
  logindate date);

create index idx on t1 (accountid, logindate);

insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), 
    (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), 
    (1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')

Prováděcí plán

ID  SELECT_TYPE  TABLE  TYPE  POSSIBLE_KEYS  KEY  KEY_LEN  REF   ROWS  FILTERED  EXTRA
1   SIMPLE       t1     ref   idx            idx  2        const 5     100       Using where; Using index

Jednosloupcový index

create table t1 (
  accountid tinyint,
  logindate date);

create index idx on t1 (accountid);

insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), 
    (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'), 
    (3, '2012-10-19'), (1, '2012-03-01')

Prováděcí plán

ID  SELECT_TYPE  TABLE  TYPE   POSSIBLE_KEYS  KEY  KEY_LEN  REF   ROWS  FILTERED  EXTRA
1   SIMPLE       t1     range  idx            idx  2              5     100       Using where; Using filesort



  1. Skupiny dostupnosti SQL Server AlwaysOn:Instalace a konfigurace, část 1

  2. mysql aktualizuje sloupec s int na základě objednávky

  3. Jak generovat skripty pro přidání výchozích omezení do sloupce ve více tabulkách v databázi SQL Server - SQL Server / Výukový program TSQL část 94

  4. Zhroucení MySQL Innodb