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

MySQL:Ако използвам функция в SQL заявка повече от един път, тя ще се преизчислява ли всеки път?

Ето кратък експеримент, за да видите какво се случва.

create function determin_rand (i integer) 
returns float DETERMINISTIC
return rand();

create function not_determin_rand (i integer) 
returns float 
return rand();

select determin_rand(1) as d1 , determin_rand(1) as d2, 
  not_determin_rand(1) as nd1, not_determin_rand(1) as nd2

0.00850549154   0.831901073456  0.133989050984  0.174242004752

Тъй като стойностите са различни, функцията се извиква всеки път. В първата функция я обявих за детерминистична, но това не направи разлика.

Направих sqlfiddle, за да го изпробвате с различни версии на mysql.

http://sqlfiddle.com/#!2/a8536/2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте временна таблица с дати

  2. Поръчайте MySQL таблица по две колони

  3. MySQL не използва индекс за ORDER BY

  4. java.lang.IncompatibleClassChangeError:Намерен клас com.mysql.jdbc.Statement, но интерфейсът се очакваше

  5. Грешки, появяващи се в mysqli кода и call_user_func_array()