【发布时间】:2019-02-25 05:12:07
【问题描述】:
我已经在'workflow.status' 字段上创建了索引,但是为什么在创建索引后查询执行时间增加了?
查询:
select workflow.* from
(
SELECT CASE
WHEN cert.value = 'true' THEN 0
ELSE 1 END lawAndOrder, workflow.*
FROM testdb.statuschanges hist, testdb.usercerts cert, testdb.workflow
WHERE workflow.taskid = hist.taskid AND hist.username = cert.username AND cert.projectname = 'Core_EECA_RUS_2018_shp_UPDGeo_LL' AND cert.key = 'DISABLECOMMIT'
AND hist.statuschangeid =workflow.proposedstatuschangeid AND workflow.status in ('Check')and workflow.projectname = 'Core_EECA_RUS_2018_shp_UPDGeo_LL' AND workflow.claimedby IS NULL
UNION
SELECT CASE
WHEN workflow.status = 'INProgress' THEN 1
WHEN workflow.status = 'Feedback' THEN 2
WHEN workflow.status not in ('Check', 'INProgress', 'Feedback') THEN 3
END lawAndOrder,workflow.*
FROM testdb.workflow
WHERE workflow.status != 'Check' AND workflow.claimedby IS NULL AND workflow.projectname = 'Core_EECA_RUS_2018_shp_UPDGeo_LL' order by lawAndOrder ASC, TaskId
)
workflow WHERE ProjectName = 'Core_EECA_RUS_2018_shp_UPDGeo_LL' AND
Status IN ('SourcedFromGuidedCommunity', 'NeedsWorkInTIF', 'NeedsFieldCollection', 'INProgress', 'Completed', 'Check', 'New', 'Reject', 'In Testing', 'Check Reject', 'Check Accept with minor remark', 'InQA', 'Rework', 'Feedback')
AND ClaimedBy IS NULL
索引创建声明:
CREATE INDEX idx_workflow_status
ON testdb.workflow
USING btree
(status COLLATE pg_catalog."default");
是否有可能索引增加时间?
【问题讨论】:
-
是的,这是可能的。添加
EXPLAIN (ANALYZE, BUFFERS)输出以获取更多信息。 -
在您收集信息的同时,this 可能会带来有趣的阅读。
-
status上的索引对于以!=开头的查询没有帮助。该查询的更好索引是create index on workflow (projectname, claimedby) where status <> 'Check' -
不相关,但是:在表达式
FROM testdb.workflow中,标识符testdb指的是模式,而不是“数据库”。将模式命名为“db”非常令人困惑
标签: postgresql indexing postgresql-9.1