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

Как да оптимизираме MySQL заявки въз основа на план EXPLAIN

Зависи какво търсите и каква е заявката.

По принцип за всеки ред в EXPLAIN, който има Using where , трябва да го имате с помощта на индекс (possible keys и keys колона). Това са вашите филтри и включват WHERE и ON. Да кажем Using index е дори по-добре. Това означава, че има покриващ индекс и MySQL може да извлича данните направо от индекса, вместо да посещава реда в данните в таблицата.

Редовете, където няма Using where , и връща голям брой редове, трябва да се разгледат. Това са връщащи стойности за всички редове в таблицата. Не знам какво е вашето запитване, така че не знам дали да се тревожа тук. Опитайте да филтрирате набора от резултати, за да намалите размера и да подобрите производителността.

Обикновено трябва да се опитвате да избягвате да виждате Using filesort или Using temporary , макар че те са лоши само ако не ги очаквате.

Сортирането на файлове обикновено се появява с клаузата ORDER. Обикновено искате MySQL да използва покриващ индекс (Using index ), така че редовете да се връщат вече по ред от сървъра. Ако не са, тогава MySQL трябва да ги поръча след това, използвайки сортиране на файлове.

Using temporary може да е лошо, когато се отнася до производни таблици, защото нямат индекси. Изглежда, че изрично сте създали временна таблица с индекси, така че тук не е лошо. Понякога единственият ви избор е да използвате извлечена таблица и следователно Using temporary .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравняване с NULL стойности

  2. Изберете от всички таблици

  3. Правете закъснение / цикъл, за да получите 10 произволни резултата

  4. Ефективно избиране на най-близкия (разстояние) запис от база данни

  5. Кога трябва да използвам UNSIGNED и SIGNED INT в MySQL?