关于postgreSQl索引问题
期末数据库考试最后有道索引题,看不太明白,求大神指导。是这样的,我简单说一下题目:
设在postgreSQl数据库中有一张表Student_Assessment(Student_id, assessment_id, score)
通过查询pg_class系统表,得到的物理存储如下:
relname | reltuples | relpages
student_assessment | 249999 | 2942
在未建立表索引的情况下,对该表的一个查询进行explain和analyze工具分析
explain analyze select student_id, assessment_id
from studengt_assessment
where score between 50 and 80;
结果为: ...(cost=0.00..6691.98 rows=78990 width=8) (actual time=114.35..790.73 rows=77833 loops=1) Total runtime:847.33 msec
然后建了个btree索引
create index student_assessment_index on student_assessment using btree(score);
然后重新分析查询
explain analyze select student_id, assessment_id
frome stuent_assessment
where score between 50 and 80;
结果为: ...(cost=0.00..6692.02 rows=78991 width=8) (actual time=233.38..907.74 rows=77835 loops=1) Total runtime:963.98 msec
从以上分析可看出建索引后擦汗讯性能下降。
问(1)下降的可能原因;(2)提出能真正提高查询性能的索引方案
分虽不多,但是一片诚心,希望有大神能够详解,尽量别3言2语带过,如果有空可否能说说你们平时优化索引的经验么!?不甚感谢!