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

Редът на условията в клауза WHERE влияе ли на производителността на MySQL?

Ето демонстрация показващ реда на условията на клаузата WHERE може правят разлика поради късо съединение. Той изпълнява следните заявки:

-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;

-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;

Единствената разлика между тях е реда на операндите в OR състояние.

myslowfunction умишлено заспива за секунда и има страничния ефект от добавяне на запис към таблицата на журнала всеки път, когато се изпълнява. Ето резултатите от това, което се записва при изпълнение на двете заявки:

myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4

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

Така че IMO отговорът на въпроса:

е "Понякога може."



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

  2. Проблеми с инсталацията на mysql-python (на mac os x lion)

  3. Мога ли да използвам неагрегирани колони с групиране по?

  4. Как да върнете идентификатори на Inserts с mybatis в mysql с пояснения

  5. MySQL - Как да хвърля изключение в съхранената процедура?