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

Опитвам се да оптимизирам MySQL заявката с LEFT OUTER JOIN

За съжаление mysql (и може би всеки dbms) не може да оптимизира изрази като jobs.status != 331 and ack = 0 тъй като B-Tree не е структура, която позволява бързо намиране на всичко, което-не-равно-на-постоянна-стойност. Така винаги ще получавате пълно сканиране.

Ако имаше някакво по-добро условие като jobs.status = 331 and ack = 0 (обърнете внимание на факта, че промених != до = ) тогава би било съвет да ускорите тази заявка:

  1. разделете заявката на 2, присъединени от UNION ALL
  2. заменете в една заявка LEFT JOIN към INNER JOIN (в този, който предполага, че wq.info is not NULL )



  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. Проблеми с MySQLdb връзката

  3. Обработка на латентност в MySQL транзакции

  4. Преместване на ред от една таблица в друга (Вмъкване на списък със стойности не съвпада със списъка с колони)

  5. Хибернация на mysql innodb