我对SQL很陌生,需要一些特殊任务的帮助。我有一个由我们的Flex / Java代码调用的查询,它连接多个表来获取信息。运行Explain Analyze后,我发现查询需要15分钟,如果网站流量过大,有时甚至会超时。我想要做的是创建一个规则或触发器,查看是否调用了查询,并从实体化视图表中选择数据。我尝试为此实现规则,但在尝试连接规则中的多个表时遇到错误时遇到了困难。基本上有一种方法,无论是规则,触发器还是其他任何我没有看过的东西,让我看看是否可以执行某个查询,我可以用另一个表替换该查询?提前谢谢。
查询示例:
select
player_id,
player_names,
player_level,
current_location
from
server_info
join players using (player_id)
join locations using (location_id)
where
current_location = 'Central Hub'
答案 0 :(得分:2)
为什么不改变应用程序以获取物化视图(如果这是您想要的)?没有办法重写一个复杂的连接来获取一个不相关的表 - 我知道。并且,如果你能做到,你真的想在你的查询规划器/规则系统中拥有这样的深层伏都教? SQL VIEW
是使用SELECT RULE
实现的,但这并不能让您从复杂查询到物化视图。它可以将您从 TABLE1 转移到 TABLE2 。
更好的问题是player_id
和location_id
上的类型是int
,它们都有btree
个索引吗?是current_location
索引,是否用于相等,正则表达式或LIKE条件?您使用的是什么版本的Postgresql?您是否可以附加导致大量等待时间的EXPLAIN ANALYZE
查询?