我做了一个mysql查询,它使用值' x'从表A获取结果集。存储在表B.现在,只要我需要' x'我需要最多重复6次。
我的查询的简化版本如下所示:
SELECT * FROM A WHERE a = (SELECT x FROM B ...) AND b = (SELECT x FROM B ...)-5 AND c = (SELECT x FROM B ...)+7
有没有办法存储这个价值' x'在评估我的sql语句时? 如果没有,那么使用2个查询是否有意义(第一个用于获取' x'第二个用' x'包含在真实语句中)?
如果你想看一个我的陈述,这是一个例子:
"(SELECT * FROM map WHERE x BETWEEN :x-:sight and :x+:sight AND y BETWEEN :y-:sight+:map_max_y and :map_max_y) /*1.part*/
UNION
(SELECT * FROM map WHERE x BETWEEN :map_min_x and MOD((:x+:sight),:map_max_x) AND y BETWEEN :y-:sight+:map_max_y and :map_max_y ORDER BY y LIMIT 225) /*2.part*/
UNION
(SELECT * FROM map WHERE x BETWEEN :x-:sight and :map_max_x AND y BETWEEN :map_min_y and :y+:sight ORDER BY y LIMIT 225) /*3.part*/
UNION
(SELECT * FROM map WHERE x BETWEEN :map_min_x and MOD((:x+:sight),:map_max_x) AND y BETWEEN :map_min_y and :y+:sight ORDER BY y LIMIT 225) /*4.part*/";
' x',' y','视线'都存储在数据库中,这会伤害我的眼睛多次重新加载它们(这是旧的版本,它还没有从DB加载它们)。而且我相信做出2个查询也是一个坏习惯。
先谢谢你们,伙计们:)
答案 0 :(得分:0)
Mysql优化器应该能够检测到这样的重复子选择并只执行一次。只要确保它实际上是相同的select,它不使用外部的任何变量,并使用EXPLAIN来确认它是否得到优化。