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