Mysql可以使用相同的参数缓存对相同函数的调用

时间:2015-09-26 17:47:23

标签: mysql query-optimization

例如我有这个条件

WHERE f1=CONCAT(v1,v2) OR f2=CONCAT(v1,v2) -- /*...

其中v1,v1是静态的,那么Mysql必须在第一次调用后缓存concat的结果。 如果v1是field,那么Mysql必须在第一次调用后缓存concat的结果,但仅限于当前行。

那么,Mysql这样做了吗?

1 个答案:

答案 0 :(得分:2)

不,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自行进行缓存。再一次,你获得了很多(如果有的话)速度。 (但是,您可能会在代码中获得简单性。)