Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Optimizing a stored function call in SELECT and WHERE clauses

I have an SQL query with the following structure:

SELECT *, storedfunc(param, table.field) as f 
FROM table 
WHERE storedfunc(param, table.field) < value 
ORDER BY storedfunc(param, table.field);

Is there a way to optimize this eliminating several function calls? Or does MySQL perform such optimization behind the scene? In fact the function is declared as deterministic.

I need also to mention that the function params are partially from selected table's columns. I changed the example slightly to reflect this.

like image 607
Stan Avatar asked Jun 11 '12 09:06

Stan


1 Answers

Rewrite and test which one performs faster:

SELECT *, storedfunc(param, table.column) AS f 
FROM table 
WHERE storedfunc(param, table.column) < value 
ORDER BY f ;

SELECT *
FROM
  ( SELECT *, storedfunc(param, table.column) AS f 
    FROM table 
  ) AS tmp
WHERE f < value 
ORDER BY f ;

In MySQL, you can even write like this (warning: not standard SQL syntax):

SELECT *, storedfunc(param, table.column) AS f 
FROM table 
HAVING f < value 
ORDER BY f ;
like image 69
ypercubeᵀᴹ Avatar answered Sep 21 '22 03:09

ypercubeᵀᴹ