Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL добри ли са моите индекси?

Напишете заявката по следния начин:

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

Не посочвайте какви индекси да използвате.

Започвайки с WHERE клауза, изглежда, че това може бъде полезен:INDEX(status) . Но тъй като „статус“ звучи като „флаг“ с ниска мощност, оптимизаторът може решите да игнорирате индекса и просто да сканирате таблицата. Това е наред. Добре е, защото е по-бързо да се направи сканиране на таблица, отколкото да се прескача между индекс и данни, когато индексът не е много селективен. Във всеки случай оставете решението на оптимизатора.

Сега, когато се занимава с orders , трябва да JOIN до users . Единственият начин да направите това е да имате индекс на id . Това име ("id") предполага, че може да е PRIMARY KEY , Така ли? (Моля, предоставете SHOW CREATE TABLE .)

Индексна готварска книга

Другата заявка, която споменахте, трябва да бъде написана

SELECT * FROM users WHERE id=33

И, както вече беше обсъдено, индексът (PRIMARY KEY ?) на id е правилното нещо.

Няма предимство (за дадените SELECTs , поне) за INDEX(status, id_user) . Вашият избор включва всички колони (* ); беше изтеглено само id_user , тогава такъв индекс би бил "покриващ" и би имал известно предимство.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. показване на данни от sql от щракване върху svg карта

  2. Как да синхронизирам две таблици с различни MySQL бази данни на една и съща машина?

  3. Разлика между ключ, първичен ключ, уникален ключ и индекс в MySQL

  4. производителност на броене на mysql

  5. Как да избера цял ред, който има най-голям идентификатор в таблицата?