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

MySQL Query не използва индекс в присъединяването на таблица

Както можете да видите в EXPLAIN, "book_id" е посочен като възможен ключ. Ако MySQL не го използва, просто оптимизаторът не смята, че това би ускорило заявката. Което е вярно, ако „book_sales“ има само 2 реда и 100% от тези редове споделят един и същ „book_id“. Между другото, това се нарича кардиналност. Как да избегнем сканирането на таблици (Ръководство за MySQL)

Опитайте да го попълните с повече редове и трябва да видите, че MySQL ще използва индекс за присъединяването.

Редактиране:заявката

SELECT sale_amount, price
FROM books, book_sales
FORCE INDEX ( book_id ) 
WHERE book_sales.book_id = books.book_id
AND books.author_id =1

... няма да работи и в този случай, защото оптимизаторът все още разпознава, че четенето на индекса е неоптимално и превключва реда на таблицата, за да избегне това. Можете да принудите реда на таблицата, като използвате STRAIGHT_JOIN . Това обаче е малко хак, защото принуждава MySQL да изпълни заявката по начин, който не е най-добрият.

      EXPLAIN
       SELECT sale_amount, price
         FROM books
STRAIGHT_JOIN book_sales FORCE INDEX (book_id) ON book_sales.book_id = books.book_id
        WHERE books.author_id = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете подкатегории от избрана категория с помощта на вложена функция в PHP?

  2. Множество формуляри и една страница за обработка

  3. Как да настроите отдалечена MySQL връзка

  4. Много прост потребителски въвеждане в django

  5. Нещо не е наред с Hibernate DB Connection pooler c3p0