SELECT `id` , `title` , idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) `distant`
FROM `idlife_shop`
WHERE idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) <= 50
ORDER BY `distant`
FROM `idlife_shop`
WHERE idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) <= 50
ORDER BY `distant`
SELECT `id` , `title` , idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) as idlifegeoresult `distant`
FROM `idlife_shop`
WHERE idlifegeoresult <= 50
ORDER BY `distant`
from (
SELECT `id` , `title` , idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) distant`
FROM `idlife_shop`
)T
ORDER BY T.distant
from (
SELECT `id` , `title` , idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) distant`
FROM `idlife_shop`
)T
where T.distant>50
ORDER BY T.distant
mysql>SELECT BENCHMARK(1000000,(SELECT idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` )FROM `idlife_shop` limit 1));
这样你就知道它对性能的影响有多大了~
不过据我估计,它是可以小到完全不需要担心的,LZ要相信CPU的计算能力~
如果LZ要让这个查询看起来美丽一点的话,可以把WHERE替换成HAVING:
SELECT `id` , `title` , idlifegeo( 114.0869411, `coordinateX` , 22.5431184, `coordinateY` ) `distant`
FROM `idlife_shop`
HAVING `distant`<= 50
ORDER BY `distant`
不过MySQL文档说,没有使用GROUP BY或者聚合函数的HAVING会和WHERE合并,也就是说被优化器优化后,还是使用了WHERE。
说了一大圈,还是没有回答的楼主的问题,抱歉~我上网找了很久,也没有找到关于这个问题的答案:到底是计算了一次还是两次。
希望有高人能解答这个问题,不过,这应该不是一个需要LZ担心的性能问题~