首页 > 在postgresql中为什么索引没有被使用

在postgresql中为什么索引没有被使用

现在我有有一个表,表中的数据在千万条左右,表中在direct_zone_id 上有一个索引 具体的描述如下:

CREATE TABLE common_order
(
  id bigint NOT NULL,
  version bigint NOT NULL,
  direct_zone_id bigint NOT NULL, -- 区域code(公司名称)
  order_channel character varying(255), -- 销售渠道
  order_code character varying(255) NOT NULL, -- 订单号
  order_price numeric(19,2) NOT NULL, -- 订单价格
  order_type character varying(255) NOT NULL,
  CONSTRAINT common_order_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

-- DROP INDEX idx_direct_zone_id;

CREATE INDEX idx_direct_zone_id
  ON common_order
  USING btree
  (direct_zone_id);
  

我使用了一个sql,如下:

select * from common_order, ( select (array[8,90]) [idx.n] as id from generate_series(1,7) idx(n)) as t where direct_zone_id  = t.id limit 10

通过执行计划如下图:

发现居然没有使用idx_direct_zone_id这个索引。
如果是简单的

select * from   common_order where direct_zone_id  = 10

就会使用 idx_direct_zone_id 索引。

我的问题就是,这里为啥第一个sql没有使用索引呢?
希望高手帮忙解答!


一般对这些难调的,我都会设置

set join_collapse_limit = 1;

手工确定连接顺序,这样就能尽可能调整它的算法了。

【热门文章】
【热门文章】