加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

转载:PostgreSQL SQL的性能提升

发布时间:2020-12-13 17:29:04 所属栏目:百科 来源:网络整理
导读:原文:http://blog.csdn.net/hantiannan/article/details/4522172 PostgreSQL提供了一些帮助提升性能的功能。主要有一些几个方面。 1.使用EXPLAIN EXPLAIN命令可以查看执行计划,在前面的blog中已经介绍过。这个方法是我们最主要的调试工具。 2.及时更新执行
原文:http://blog.csdn.net/hantiannan/article/details/4522172

PostgreSQL提供了一些帮助提升性能的功能。主要有一些几个方面。
1.使用EXPLAIN
EXPLAIN命令可以查看执行计划,在前面的blog中已经介绍过。这个方法是我们最主要的调试工具。
2.及时更新执行计划中使用的统计信息
由于统计信息不是每次操作数据行更新的,一般是在VACUUMANALYZECREATEINDEX等DDL执行的时候会更新统计信息,
因此划所用的统计信息很有可能比旧。这样执划的分析果可能差会大。
以下是表tenk1的相关的一部分统计信息。
SELECT relname,relkind,reltuples,relpages
FROMpg_class
WHERE relnameLIKE 'tenk1%';
relname | relkind | reltuples |relpages
----------------------+---------+-----------+----------
tenk1 |r|10000|358
tenk1_hundred|i|10000|30
tenk1_thous_tenthous|i|10000|30
tenk1_unique1 |i|10000|30
tenk1_unique2 |i|10000|30
(5 rows)
其中relkind是类型,r是自身表,i是索引index;reltuples是项目数;relpages是所占硬盘的块数。
3.明确用join来关联表
一般写法:SELECT * FROM a,b,cWHERE a.id = b.id AND b.ref = c.id;
如果明确用join的话,执行时候执行计划相对容易控制一些。
例子:
SELECT * FROM a CROSS JOIN bCROSS JOIN c WHERE a.id = b.id AND b.ref = c.id;
SELECT * FROM a JOIN (b JOINc ON (b.ref = c.id)) ON (a.id = b.id);
4.关闭自动提交(autocommit=false)
5.多次插入数据是用copy命令更有效率
我们有的处理中要对同一张表执行很多次insert操作。这个时候我们用copy命令更有效率。因为insert一次,其相关的index都要做一次,比较花费时间。
6.临时删除index
有时候我们在备份和重新导入数据的时候,如果数据量很大的话,要很几个小时才能完成。这个时候可以先把index删除掉。导入在建index。
7.外键关联的删除
如果表的有外键的话,每次操作都没去check外键整合性。因此比较慢。数据导入后在建立外键也是一种选择。
8.增加maintenance_work_mem参数大小
增加这个参数可以提升CREATE INDEX和ALTERTABLE ADD FOREIGN KEY的执行效率。
9.增加checkpoint_segments参数的大小
增加这个参数可以提升大量数据导入时候的速度。
10.设置archive_mode无效
这个参数设置为无效的时候,能够提升以下的操作的速度
?CREATE TABLE AS SELECT
?CREATE INDEX
?ALTER TABLE SETTABLESPACE
?CLUSTER等。
11.最后执行VACUUM ANALYZE
表中数据大量变化的时候建议执行VACUUMANALYZE。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读