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

MySQL nie używa indeksu podczas sprawdzania =1 , ale używa go z =0

Dlaczego MySQL nie używa indeksu?
MySQL nie użyje indeksu, jeśli duży procent wierszy ma tę wartość.

Dlaczego dodanie use index do zapytania nie działa tutaj
Dodawanie use index klauzula nie zadziała, ponieważ use index zasugeruje tylko, które indeks do użycia, nie zasugeruje, czy użyć indeksu, czy nie.

Uważaj przy korzystaniu z tabel testowych z kilkoma wierszami
Jest to szczególnie dokuczliwe, gdy używasz tabel testowych z kilkoma wierszami, ponieważ MySQL odmówi użycia indeksu i trudno będzie zobaczyć, co jest nie tak z zapytaniem.
Więc upewnij się, że do tabeli testowej dodasz wystarczającą liczbę wierszy aby był to realistyczny test.

Czy używanie indeksu w kolumnach o niskiej kardynalności jest bezużyteczne?
Indeksowanie w kolumnach logicznych nie jest tak przydatne jak myślałeś przed zadawaniem tego pytania.
Jednak nie jest to również bezużyteczne albo.
Z InnoDB MySQL spróbuje pobrać dane za pomocą indeksów, jeśli to możliwe, jeśli twoje pole logiczne ma indeks, zapytanie:

SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1

Może odczytać wszystkie dane w indeksie pokrywającym dla bool_field ponieważ indeksy dodatkowe w InnoDB zawsze zawierają indeks główny (id) również.
Jest to szybsze, ponieważ MySQL nie musi wczytywać całej tabeli do pamięci.

W MyISAM to nie działa i MySQL przeanalizuje całą tabelę.

Ale mogę użyć force index
Możesz, ale przy indeksach o niskiej kardynalności spowoduje to, że Twoje zapytanie będzie wolniejsze, a nie szybsze.Zastępuj indeksy tylko w przypadku złożonych zapytań i tylko jeśli znasz zasady, których MySQL używa do wybierania indeksów.

Linki:
Patrz:http://dev.mysql .com/doc/refman/5.1/en/mysql-indexes.html
i: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

Jeśli chcesz książkę na ten temat:przeczytaj
Wysokowydajny MySQL:http://oreilly.com /katalog/9780596003067



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Otwarta baza danych QSqlDatabase zawsze zwraca prawdę po aktualizacji

  2. Jaki jest najbezpieczniejszy sposób dodania html/css/js do mysql?

  3. Kłopoty z podjęciem decyzji o identyfikacji lub braku identyfikacji relacji

  4. Jak najlepiej zaprojektować REST API z wieloma filtrami?

  5. Jak sprawdzić, czy zapytanie MySQL przy użyciu starszego interfejsu API zakończyło się powodzeniem?