nar*_*duk 7 postgresql indexing optimization
我在Postgres数据库中有许多只读表.可以使用任何列组合查询所有这些表.
我该怎么做才能优化查询?向所有表的所有列添加索引是一个好主意吗?
Erw*_*ter 14
用于过滤或连接(或在较小程度上,排序)的列对索引感兴趣.刚刚选择的列几乎没有相关性!对于以下查询,只有a和e上的索引可能有用:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Run Code Online (Sandbox Code Playgroud)
在这里,f和c可能也是候选者:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Run Code Online (Sandbox Code Playgroud)
创建索引后,测试它们是否真的有用EXPLAIN ANALYZE.还可以比较使用和不使用索引的执行时间.删除和重新创建索引非常简单快捷.还有一些参数,试验用EXPLAIN ANALYZE.差异可能是惊人的或不存在的.
由于您的表是只读的,索引维护很便宜.这只是盘空间的问题.
如果您真的想知道自己在做什么,请先阅读文档.
尝试记录足够的查询以查找典型用例.使用参数记录查询log_statement = all.或者只使用登录慢查询log_min_duration_statement.
创建可能有用的索引并在一段时间后检查统计信息以查看实际使用的内容.PostgreSQL有一个完整的基础设施来监控统计数据.研究统计(以及许多其他任务)的一种便捷方法是pgAdmin,您可以在其中选择表/函数/索引,并在对象浏览器(主窗口)中的"统计"选项卡上获取所有数据.
按上述步骤继续查看使用中的索引是否真正加快了速度.
如果查询规划器应该选择使用一个或多个索引但是没有或产生不利影响,那么您的设置可能出现问题,您需要研究性能优化的基础知识:真空,分析,成本参数,内存使用情况等. ..
| 归档时间: |
|
| 查看次数: |
2985 次 |
| 最近记录: |