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

MySQL jsou moje indexy dobré?

Napište dotaz takto:

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

Neurčujte, jaké indexy se mají použít.

Počínaje WHERE klauzule, vypadá to takto mohlo být užitečné:INDEX(status) . Ale protože „stav“ zní jako „vlajka“ s nízkou mohutností, optimalizátor může rozhodnout se ignorovat index a jednoduše provést skenování tabulky. To je v pořádku. Je to v pořádku, protože je rychlejší provádět skenování tabulky než přeskakovat mezi indexem a daty, když index není příliš selektivní. V každém případě nechte rozhodnutí na Optimalizátoru.

Nyní, když se zabývá orders , musí se JOIN users . Jediný způsob, jak toho dosáhnout, je mít index na id . Tento název ("id") naznačuje, že se může jednat o PRIMARY KEY , je to tak? (Uveďte prosím SHOW CREATE TABLE .)

Indexová kuchařka

Druhý dotaz, který jste zmínil, by měl být napsán

SELECT * FROM users WHERE id=33

A jak již bylo řečeno, index (PRIMARY KEY ?) na id je správná věc.

Neexistuje žádná výhoda (pro dané SELECTs , alespoň) pro INDEX(status, id_user) . Váš výběr zahrnuje všechny sloupce (* ); bylo to načteno pouze id_user , pak by byl takový index "krycí" a měl by určitou výhodu.




  1. Kdy ukončit připojení MySQL pomocí node-mysql?

  2. Jsou funkce PostgreSQL transakční?

  3. Jak mohu použít souběžný přístup k tabulce mysql v PHP

  4. Prohlášení Oracle