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

Коя MySQL заявка е по-бърза?

Винаги трябва да използвате EXPLAIN за да определите как ще се изпълнява вашата заявка.

За съжаление MySQL ще изпълни вашата подзаявка като ЗАВИСИМА ЗАПИСКА, което означава, че подзаявката ще се изпълнява за всеки ред във външната заявка. Бихте си помислили, че MySQL ще бъде достатъчно умен, за да открие, че подзаявката не е корелирана подзаявка и ще я изпълни само веднъж, уви, все още не е толкова интелигентна.

Така MySQL ще сканира всички редове в учениците, изпълнявайки подзаявката за всеки ред и няма да използва никакви индекси на външната заявка.

Написването на заявката като JOIN би позволило на MySQL да използва индекси, а следната заявка би била оптималният начин да се напише:

SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
  ON c.id = s.classes_id
  AND c.departments_id = 1
WHERE s.status = 1

Това ще използва следните индекси:

students(`status`)
classes(`id`, `departements_id`) : multi-column index


  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

  2. Преименувайте колона в таблицата на mysql, без да се налага да повтаряте нейната дефиниция на типа

  3. Използване на Amazon RDS с приложение за Android

  4. phpActiveRecord Неправилен формат на дата и час

  5. Изберете редове от таблицата на MySQL, където времевата марка на PHP е по-стара от X