如何在PostgreSQL 8.3中重写查询

时间:2010-07-27 14:36:09

标签: sql postgresql

我对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'

1 个答案:

答案 0 :(得分:2)

为什么不改变应用程序以获取物化视图(如果这是您想要的)?没有办法重写一个复杂的连接来获取一个不相关的表 - 我知道。并且,如果你能做到,你真的想在你的查询规划器/规则系统中拥有这样的深层伏都教? SQL VIEW是使用SELECT RULE实现的,但这并不能让您从复杂查询到物化视图。它可以将您从 TABLE1 转移到 TABLE2

更好的问题是player_idlocation_id上的类型是int,它们都有btree个索引吗?是current_location索引,是否用于相等,正则表达式或LIKE条件?您使用的是什么版本的Postgresql?您是否可以附加导致大量等待时间的EXPLAIN ANALYZE查询?