【问题标题】:Postgresql, Using Index with BetweenPostgresql,使用带Between的索引
【发布时间】:2011-07-14 16:01:40
【问题描述】:

我在一列上有索引,比如说ID (bigint)。如果我有这样的查询:

SELECT * 
  FROM table 
 WHERE id = 12345

...它将使用索引。但是当我使用查询时...

SELECT * 
  FROM table 
 WHERE id >= 12345 
   AND id <= 12366

它使用顺序扫描,速度很慢。我可以强制使用 ID 索引吗?

【问题讨论】:

  • 你使用的是什么类型的索引,btree?
  • 嗨,Alexius,你是对的。我使用哈希而不是 BTree。一旦我更改为 BTree,它现在正在使用索引。谢谢。
  • EXPLAIN ANALYZE yourqueryhere 有什么要说的?
  • 解释分析说它正在使用 seq 索引。

标签: sql postgresql indexing


【解决方案1】:

如果索引类型是 btree 并且 select 没有获取超过所有记录数的 30%,它应该使用索引(在 postgresql 中也是如此吗?) @scott- marlowe 说“..对于 PostgreSQL,切换点要早得多,在 1% 到 10% 的范围内进行顺序扫描更便宜..”。

尝试调用 REINDEX 操作吗?

【讨论】:

  • 不,在 PostgreSQL 中,索引不是“覆盖”的,这意味着无论你是否使用索引,你都必须去表中。因此,对于 PostgreSQL 来说,切换点要早得多,在 1% 到 10% 的范围内,执行顺序扫描会更便宜。
【解决方案2】:

我不使用postgresql,但你需要做的是。

  • 查看查询计划以确认它没有使用任何索引。
  • 在 sybase 中,您可以使用“索引提示”强制查询使用某个索引

看起来这个问题给了你你想要的东西。 How do I force Postgres to use a particular index?

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多