用于过滤或连接(或在较小程度上,排序)的列对索引感兴趣.刚刚选择的列几乎没有相关性!
对于以下查询,只有a和e上的索引可能有用:
原文链接:https://www.f2er.com/postgresql/192855.html对于以下查询,只有a和e上的索引可能有用:
SELECT a,b,c,d FROM tbl_a WHERE a = $some_value AND e < $other_value;
在这里,f和c可能也是候选人:
SELECT a,d FROM tbl_a JOIN tbl_b USING (f) WHERE a = $some_value AND e < $other_value ORDER BY c;
在创建索引之后,测试它们是否真的对EXPLAIN ANALYZE
有用.还要比较使用和不使用索引的执行时间.删除和重新创建索引非常简单快捷.使用EXPLAIN ANALYZE还有experiment的参数.差异可能是惊人的或不存在的.
由于您的表是只读的,索引维护很便宜.这只是盘空间的问题.
如果你真的想知道你在做什么,start by reading the docs.
如果你不知道会发生什么样的疑问……
>尝试记录足够的查询以查找典型用例.使用参数log_statement = all
记录查询.或者只使用log_min_duration_statement
记录慢查询.
>创建可能有用的indexes并在一段时间后检查统计信息以查看实际使用的内容. Postgresql为monitoring statistics提供了一个完整的基础设施.研究统计数据(以及许多其他任务)的一种便捷方法是pgAdmin,您可以在其中选择表/函数/索引并在对象浏览器中的“统计”选项卡上获取所有数据(主窗口).
>按上述步骤继续查看使用中的索引是否真正加快了速度.
>如果查询计划程序应该选择使用一个或多个索引但没有或产生不利影响,那么您的设置可能出现问题,您需要学习the basics of performance optimization: vacuum,analyze,cost parameters,memory usage,…