我有一个表有一个日期时间字段“updated_at”。我的许多查询都将使用范围查询(如在>某个日期更新的行)来查询此字段。
我已经在updated_at中添加了一个索引,但是大多数查询仍然非常慢,即使我对返回的行数有限制。
我还可以做些什么来优化对datetime字段的查询?
最佳答案
对于任何给定的查询,索引的使用取决于与顺序扫描相比使用该索引的成本
开发人员经常认为,因为有索引,所以查询应该运行得更快,如果查询运行得慢,那么索引就是解决方案。通常情况下,查询将返回很少的元组。但随着结果中元组数的增加,使用索引的成本可能会增加。
你在用postgres。Postgres不支持围绕给定属性进行聚类。这意味着postgres在遇到范围查询(att>a和att你可以通过运行
EXPLAIN ANALYZE <query>;
在psql中。它会告诉你它是否使用索引。
如果您真的非常想使用索引而不是顺序扫描(有时这是必需的),并且您真的知道自己在做什么,那么您可以在planner常量中更改顺序扫描的成本,或者禁用顺序扫描,以支持任何其他方法。有关详细信息,请参见本页:
http://www.postgresql.org/docs/9.1/static/runtime-config-query.html
请确保浏览文档的正确版本。
--dmg公司