Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrozumienie indeksów wielu kolumn w zapytaniu MySQL

Dobre pytanie.

Indeksy działają od lewej do prawej, więc WHERE kryteria będą korzystać z indeksu. W tym przypadku sortowanie również wykorzystuje indeks (plan wykonania poniżej).

Z podręcznika :

Jeśli masz indeks z jedną kolumną (accountid ), zamiast tego zostanie użyty sortowanie plików. Dlatego Twoje zapytanie korzysta z tego indeksu.

Indeks dwukolumnowy

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')

Plan wykonania

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

Indeks pojedynczej kolumny

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')

Plan wykonania

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. limit podzapytań mySQL

  2. Lista wszystkich procedur MySQL

  3. Paginacja MySQL oparta na kursorach z wieloma kolumnami

  4. Klauzula równoważna MySQL ONLY IN()

  5. PHP- wstawianie danych binarnych w mysql za pomocą przygotowanych instrukcji