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

MySQL czy moje indeksy są dobre?

Napisz zapytanie w ten sposób:

SELECT *
    FROM orders
    JOIN users  ON orders.id_user = users.id
    WHERE orders.status='new'

Nie określaj, jakich indeksów użyć.

Zaczynając od WHERE klauzula, wygląda na to, że może być przydatne:INDEX(status) . Ale ponieważ „stan” brzmi jak „flaga” o niskiej kardynalności, optymalizator może zignoruj ​​indeks i po prostu wykonaj skanowanie tabeli. W porządku. Jest OK, ponieważ szybciej jest wykonać skanowanie tabeli niż przeskakiwać między indeksem a danymi, gdy indeks nie jest zbyt selektywny. W każdym razie pozostaw decyzję Optymalizatorowi.

Teraz, gdy zajmuje się orders , musi JOIN do users . Jedynym sposobem, aby to zrobić, jest posiadanie indeksu na id . Ta nazwa ("id") sugeruje, że może to być PRIMARY KEY , prawda? (Proszę podać SHOW CREATE TABLE .)

Indeksuj książkę kucharską

Inne zapytanie, o którym wspomniałeś, powinno zostać napisane

SELECT * FROM users WHERE id=33

I, jak już wspomniano, indeks (PRIMARY KEY ?) na id jest właściwą rzeczą.

Nie ma przewagi (dla podanych SELECTs , przynajmniej) dla INDEX(status, id_user) . Twój wybór obejmuje wszystkie kolumny (* ); pobrał tylko id_user , wtedy taki indeks byłby „pokrywający” i miałby pewną przewagę.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy instrukcja merge jest dostępna w MySQL?

  2. Dlaczego sesja telefoniczna nie działa? (współzapalnik 3)

  3. MySQL jak inne pole

  4. Wyszukiwanie w pobliżu w Mapach Google, PHP i MySQL

  5. Ograniczenie z warunkowym sprawdzaniem wartości w MySQL