Mysql可以用相同的参数缓存对相同函数的调用吗
例如,我有这个条件Mysql可以用相同的参数缓存对相同函数的调用吗,mysql,query-optimization,Mysql,Query Optimization,例如,我有这个条件 WHERE f1=CONCAT(v1,v2) OR f2=CONCAT(v1,v2) -- /*... 其中v1、v1是静态的,那么Mysql必须在第一次调用后缓存concat的结果。 若v1是字段,那个么Mysql必须在第一次调用后缓存concat的结果,但只缓存当前行的结果 那么,Mysql正在这样做吗?不,Mysql不缓存函数调用 此外,这样的优化不值得做。请注意细微的区别: mysql> SELECT city, country, CONCAT(city, c
WHERE f1=CONCAT(v1,v2) OR f2=CONCAT(v1,v2) -- /*...
其中v1、v1是静态的,那么Mysql必须在第一次调用后缓存concat的结果。
若v1是字段,那个么Mysql必须在第一次调用后缓存concat的结果,但只缓存当前行的结果
那么,Mysql正在这样做吗?不,Mysql不缓存函数调用 此外,这样的优化不值得做。请注意细微的区别:
mysql> SELECT city, country, CONCAT(city, country) FROM cities LIMIT 263000,5
+----------+---------+-----------------------+
| city | country | CONCAT(city, country) |
+----------+---------+-----------------------+
| Kitanzi | cg | Kitanzicg |
| Masend | cg | Masendcg |
| Chilute | ao | Chiluteao |
| Khilule | ao | Khiluleao |
| Tchibuti | ao | Tchibutiao |
+----------+---------+-----------------------+
5 rows in set (0.10 sec)
mysql> SELECT city, country FROM cities LIMIT 263000, 5;
+----------+---------+
| city | country |
+----------+---------+
| Kitanzi | cg |
| Masend | cg |
| Chilute | ao |
| Khilule | ao |
| Tchibuti | ao |
+----------+---------+
5 rows in set (0.09 sec)
获取行的成本比表达式中的任何函数调用都要高
但是,您可以使用@variables自己进行缓存。同样,你不会获得太多,如果有的话,速度。但是,您可能会获得代码的简单性。关于如何解释此行为的任何想法:从dual中选择rand1,rand1,其中rand1=0.40540353712197724-?RAND和RANDvalue是不同的。前者总是给出不同的随机数;后者将值转换为随机值,但可以重复。瑞克,我正在寻找一种方法来验证或使您的语句无效。所以我的问题是:为什么RAND1即使在WHERE子句中也返回相同的值。然而,我现在相信RAND1的行为与缓存无关。-使用常量初始值设定项,在执行之前,在编译语句时初始化种子一次。如果使用非恒定初始值设定项(如列名)作为参数,则种子将使用每次RAND调用的值进行初始化。这意味着对于相等的参数值,RAND每次都返回相同的值。。。某些函数(如NOW)故意在每条语句中只计算一次。我想RAND1属于这一类。