在查询计划中,我看到正在转换的行的类型。有一个应该使用的索引,但没有。类型转换是一个危险信号吗?
该表有一个 ANALYZE 并有 1.1 亿行。其中,10% 与查询匹配。
这是完整的解释:
explain select * from item_info where subtype = 'Dataset';
QUERY PLAN
------------------------------------------------------------------------------------
Gather (cost=1000.00..1592021.24 rows=1320650 width=27)
Workers Planned: 2
-> Parallel Seq Scan on item_info (cost=0.00..1458956.24 rows=550271 width=27)
Filter: ((subtype)::text = 'Dataset'::text)
(4 rows)
Time: 0.652 ms=> \d item_info
Table "public.item_info"
Column | Type | Collation | Nullable | Default
--------------+-------------------+-----------+----------+---------
root_item_pk | bigint | | not null |
type | character varying | | |
subtype | character varying | | |
Indexes:
"item_info_pkey" PRIMARY KEY, btree (root_item_pk)
"item_info_subtype_idx" btree (subtype)
"item_info_type_idx" btree (type)
不,至少在 varchar 和 text 之间不行。但事实上,它期望 1320650 行可能是一个危险信号。如果您无论如何都需要读取表的一大块内容,为什么还要使用索引呢?