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

MySql отказва да използва индекс

MySQL няма да използва индекса, ако прецени, че ще избере значително голяма част от таблицата и смята, че сканирането на таблицата всъщност е по-ефективно в тези случаи.

По аналогия, това е причината индексът на книгата да не съдържа много често срещани думи като „the“ – защото би било загуба на време да се търси думата в индекса и да се намери списъкът с номера на страниците е много дълъг списък, дори всяка страница от книгата. Би било по-ефективно просто да прочетете книгата от кора до кора.

Моят опит е, че това се случва в MySQL, ако критериите за търсене на заявка отговарят на повече от 20% от таблицата и това обикновено е правилната точка на пресичане. Може да има някои вариации въз основа на типовете данни, размера на таблицата и т.н.

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

SELECT taskid FROM tasktransitions FORCE INDEX (transitiondate_ix)
WHERE transitiondate>'2013-09-31 00:00:00';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Дублиране, копиране или архивиране на таблици в MySQL, MariaDB, Oracle, PostgreSQL, DB2 и SQLite със Създаване на таблица като SQL

  2. Затваряне на активни връзки с помощта на RMySQL

  3. Как да конвертирам този сложен SQL в заявка за модел на Django?

  4. MySQL преобразува низ от дата в Unix timestamp

  5. Как mysql прави обратна разделителна способност на IP адреси?