Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql在select和where中进行相同的计算_Mysql - Fatal编程技术网

MySql在select和where中进行相同的计算

MySql在select和where中进行相同的计算,mysql,Mysql,我有一个类似这样的查询 SELECT col1, col2 FROM table1 t1 INNER JOIN table2 t2 ON t1.col = t2.col WHERE expensive_func () < 10 这是可行的,但查询时间现在约为0.550 对两个查询的返回使用完全相同的explain(由diff确认) 有没有办法重复使用昂贵的func 我假设它的速度较慢,因为它必须存储昂贵的func的结果?因为它的速度是它的两倍多(我预计

我有一个类似这样的查询

SELECT 
  col1,
  col2 
FROM
  table1 t1 
  INNER JOIN table2 t2 
    ON t1.col = t2.col 
WHERE expensive_func () < 10 
这是可行的,但查询时间现在约为0.550

对两个查询的返回使用完全相同的explain(由diff确认)

有没有办法重复使用昂贵的func

我假设它的速度较慢,因为它必须存储昂贵的func的结果?因为它的速度是它的两倍多(我预计是最大速度)

编辑:

以防万一版本5.5.37-0ubuntu0.12.04.1-log是我正在使用的

编辑2:

从WHERE中删除
昂贵的\u func()
似乎不会对第二个查询的时间产生影响,它会返回更多的行,但时间相同

编辑3:


出于某种原因,使用mysql CREATE函数会减慢速度,从函数中取出代码并将其放入查询中会使速度更快。

昂贵的\u func
是一个存储函数。用存储函数的内容替换存储函数会使查询在约0.080秒内运行。这是一个巨大的进步


我不知道为什么存储函数会让一切变得更慢,但唯一的缺点似乎是MySQL代码的可维护性稍差

昂贵的函数()有什么用?尝试创建一个简单的自定义项,比如返回一个常量,然后再次测试。这是一个距离计算
SELECT 
  col1,
  col2,
  expensive_func() as col3
FROM
  table1 t1 
  INNER JOIN table2 t2 
    ON t1.col = t2.col 
WHERE expensive_func () < 10