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

Съхранената процедура на mysql е по-бавна 20 пъти от стандартната заявка

Само предположение:

Когато стартирате заявката на ръка, изразът WHERE ('test' IS NULL or COL1 = 'test') може да се оптимизира, когато заявката се анализира. Анализаторът може да види, че низът 'test' не е null, така че преобразува теста в WHERE COL1 = 'test' . И ако има индекс на COL1 това ще се използва.

Въпреки това, когато създадете съхранена процедура, синтактичният анализ се случва, когато процедурата е създадена. По това време то не знае какво @param ще бъде и трябва да приложи заявката като последователно сканиране на таблицата.

Опитайте да промените процедурата си на:

IF @param IS NULL
THEN BEGIN
  SELECT * FROM table1
  UNION ALL
  SELECT * FROM table2
  ...
END;
ELSE BEGIN
  SELECT * FROM table1 WHERE col1 = @param
  UNION ALL
  SELECT * FROM table2 WHERE col1 = @param
  ...
END;
END IF;

Нямам много опит със съхранените процедури на MySQL, така че не съм сигурен, че това е правилният синтаксис.



  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 в php променлива

  2. Как да избягвам специални символи в MySQL?

  3. Не виждам веднага вмъкнатите данни от MySQL

  4. Премахнете клаузата за ограничение от MySQL Workbench

  5. MySQL - Проблем със създаването на дефинирана от потребителя функция (UDF)