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

Оптимизация на заявки за използване на MySQL индекс

Няколко неща... щях да имам ЕДИН СЛОЖЕН индекс на (a_id, job, state, start_time)

Това, за да помогне за оптимизиране на заявката по всички критерии, в това, което смятам, че е най-добре настроената последователност. Един единствен "A_ID", след това две задачи, малък диапазон на състоянието, след това базиран на време. След това не забелязвайте кавички... Изглежда, че преобразувахте числови в сравнения на низове, оставете ги като числови за сравнение – по-бързо от низовете.

Освен това, като ги има всички като част от индекса, това е ПОКРИВАЩ индекс, което означава, че НЕ трябва да отива към необработените данни на страницата, за да получи другите стойности за тестване на квалифициращите записи за включване или не.

SELECT 
      count(*) AS tries 
   FROM 
      tasks
   WHERE 
          a_id = 614
      AND job IN ( 1, 3 ) 
      AND state > 80 AND state < 100 
      AND start_time >= 1386538013;

Сега, защо индексът... разгледайте следния сценарий. Имате две стаи, които имат кутии... В първата стая всяка кутия е "a_id", вътре в нея са заданията по ред, във всяко задание са диапазоните на състоянието и накрая по начален час.

В друга стая вашите кутии се сортират по начален час, в рамките на това a_id се сортират и накрая се състоят.

Което би било по-лесно да намерите това, от което се нуждаете. Така трябва да мислите за индексите. Бих предпочел да отида в едно поле за "A_ID =614", след което да прескоча до работа 1 и друга за работа 3. Във всяка работа 1, работа 3 вземете 80-100, след това време. Вие обаче познавате по-добре своите данни и обем при разглеждане на всеки критерий и може да коригирате.

И накрая, count(ID) срещу count(*). Единственото нещо, което ме интересува, е рекордно квалифицирано. Не е нужно да знам действителния идентификатор, тъй като критериите за филтриране вече са квалифицирани като включват или не, защо да търсим (в този случай) действителния „ID“.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преминаване от база данни към сесии

  2. Спрете MySQL повторното използване на AUTO_INCREMENT ID

  3. Направете автоматично увеличение за запълване на изтрития номер

  4. Активирайте регистрирането на бавни заявки (Slow Query Log) в MySQL база данни

  5. PHP квадратчето за отметка е зададено за проверка въз основа на стойността на базата данни