首页 > 编程知识 正文

postgresql,postgresql优化

时间:2023-05-04 20:31:08 阅读:189786 作者:3143

如果数据量很大,则应该考虑提高查询效率。 如果不做任何优化,即使是最简单的查询语句,执行速度也很慢,不能接受的百万级表当然“优化”本身是一个比较复杂的工序,从设计表、字段到查询语句的写法都有很多讲究,这里只把索引的方式

以下操作对应于数据库表w008exe criseinfo (8000数据量)、w008wf02info (4000数据量

1任务表单数据

SELECTw.* fromw 008wf02info wherew.isremoved=0a ndw.wfno=' wf02 ' and exists (select1fromw 008exe criseinfoinfojists ubjecttyp=pandp.loginname=. createbya NDP.verify users=' yixiLin name (. createbya NDP.verify users ) 652 where info.isreme

顺便说一下,如果在此处将w.*更改为相应的字段,查询的速度也会稍微加快。 由于将*转换为相应字段的操作进一步减少,因此标准查询规范不会使用table.*。

向添加索引:尽管添加索引会加快查询的速度,但添加索引并不会加快查询的速度,在某些情况下甚至会相反。 通常,索引会添加在where之后的查询字段中,特别是相关字段之上。 这里w008exe criseinfo表的数据量最大,暂时针对该表进行处理。 w008exe criseinfo表包含四个字段:子类型、梯度类型、wfid和is_removed。 其中,首先不考虑is_removed。 subjecttyp和gradetyp保存词典表中的数据,wfid保存数字类型的字符串。 索引起到的效果还取决于这样的条件。 一般来说,要添加索引的字段的值“唯一性”越明显越好。 其中,subjecttyp和gradetyp包含许多重复值,索引效果“不明显”,而wfid就像“主键”,相应的效果相当好。

2.1subjecttyp和gradetyp添加索引

createindexw 008exe criseinfograde typindex onw 008exe criseinfo (grade typ ); createindexw 008exe criseinfosubject typindex onw 008exe criseinfo (subject typ ); 添加后的执行时间约为秒,稍微加快了一点

2.2向wfid添加索引

createindexw 008exe criseinfowfidindex onw 008exe criseinfo (wfid ); 再次运行,0.2秒左右,速度快了很多

再补充一点,索引常常无法正常工作,例如like后面的字段和条件语句or相关的字段。 在这种情况下,必须考虑查询策略。

用w3表示当前表的索引内容;

select * from pgindexeswheretablename=' w008exe criseinfo ';

select * from pgstatioallindexeswhererelname=' w008exe criseinfo ';

! 删除索引

DROP INDEX indexName;

5重置索引

如果您发现某些经常更改的表随着时间的推移会降低查询效率,请考虑重置索引。

这是因为如果表的内容频繁更改,则会发生很多类似“索引碎片”的情况,从而会增加查询索引本身的时间。

reindex索引索引name; //重置单个索引reindex表name; //重置整个表的索引reindex数据库dbname; //因为中止了整个数据库,所以你

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。