【转】PostgreSQL Index性能调优
Index(索引)这个概念对于很多熟悉关系型数据库的人来说,不是一个陌生的概念。当表中数据越来越多时,在查询时,为了避免全表查询(sequence scan)可以在查询相关的条件字段上添加索引。举例来说明index对于查询效率的影响。首先创建测试表 "sort_test",如下时表创建SQL,可以发现此表有2个字段id和salary。其中id是主键,我们知道属于主键的字段是默认添加了索引的。
- CREATE TABLE public.sort_test
- (
- id bigint NOT NULL,
- salary numeric NOT NULL,
- CONSTRAINT sort_test_pkey PRIMARY KEY (id)
- )
- TABLESPACE pg_default;
- ALTER TABLE public.sort_test
- OWNER to postgres;
以以下SQL查询语句为例进行讲解,其中查询字段salary上没有创建索引。
- select * from public."sort_test" where salary = 101;
那么此时的执行计划和执行时间是多少呢,可以参考下图,执行计划是走Parallel Seq Scan,SQL运行时间是 246.71 ms.
那么如果要在salary字段上添加索引呢?创建索引的语句如下:
- CREATE INDEX index_sort_test_salary
- ON public.sort_test USING btree
- (salary ASC NULLS LAST)
- TABLESPACE pg_default;
salary应用索引之后的执行计划如何呢?可以参考下图,执行时间为0.047 ms,执行时间有了大幅度提升,大致提升了5200多倍。所以在大容量表中,查询时,如果有性能问题,首先要检查相关的字段有没有创建或者走索引。测试表的容量是500万行。
如果是小容量的表或者表不会发生很多的查询操作,反而会有很多的插入/更新操作,那么此时就要对创建索引这件事慎重了。
那么很多同学可能会中途接手项目,对于表结构的历史不是特别熟悉,那么对于一个很大的项目,表结构可能也比较复杂,那么应该怎么去快速定位哪些索引很少用呢?可以参考如下SQL,如何查询结果是0,那么可以考虑将相关索引删除。
- select idx_scan from pg_stat_user_indexes where indexrelname = 'index_sort_test_salary';
个人的建议是极少用到的索引可以删除,留下无用的索引可能会造成其他类型的操作性能问题,还有就是索引也会占用磁盘空间的。
【转】PostgreSQL Index性能调优的更多相关文章
- elasticsearch5.3.0 bulk index 性能调优实践
elasticsearch5.3.0 bulk index 性能调优实践 通俗易懂
- PostgreSQL 数据库性能调优的注意点
PostgreSQL提供了一些性能调优的功能.主要有如下几个方面.1.使用EXPLAIN EXPLAIN命令可以查看执行计划,这个方法是我们最主要的调试工具. 2.及时更新执行计划中使用的统计信息 ...
- iOS-------应用性能调优的25个建议和技巧
性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的 ...
- 性能调优:理解Set Statistics IO输出
性能调优是DBA的重要工作之一.很多人会带着各种性能上的问题来问我们.我们需要通过SQL Server知识来处理这些问题.经常被问到的一个问题是:早上这个存储过程运行时间还是可以的,但到了晚上就很慢很 ...
- 在SQL Server 2016里使用查询存储进行性能调优
作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在 ...
- iOS应用性能调优建议
本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以 ...
- Java 应用性能调优实践
Java 应用性能优化是一个老生常谈的话题,笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层.框架层.JVM 层.通过介绍 Java 性能诊断工具和思路,给出搜狗商业平台的性 ...
- iOS应用性能调优的25个建议和技巧
本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以 ...
- Advacned Puppet: Puppet Master性能调优
本文是Advanced Puppet系列的第一篇:Puppet master性能调优,谈一谈如何优化和提高C/S架构下master端的性能. 故事情节往往惊人地类似:你是一名使用Puppet管理线上业 ...
随机推荐
- Jmeter 常用函数(10)- 详解 __threadNum
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 返回当前线程组产生的线程的线程编号 语 ...
- 12. oracle 常用函数
一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char) ...
- go 多线程并发 queue demo
原文链接:Writing worker queues, in Go 1.work.go [root@wangjq queue]# cat work.go package main import &qu ...
- 中文、sci论文写作结构总结
全文建议:30-40篇参考文献,6-8个图,1-3表,<3000词. 一.题目 1.12~15个词,顶多18个词. 2.6个特点:specific.short.impressive.famili ...
- Mysql 5.6创建新用户并授权指定数据库相应权限
一.环境 Centos 6.9 Mysql 5.6.40 二.步骤 1.使用root用户登陆mysql mysql -uroot -p 输入密码: 2.创建新用户 CREATE USER 'user' ...
- python实现对列表的增删查修操作
#定义一个空列表 list_demo=[] #1,向列表中插入元素 def append_demo(): #第一种使用append,可以在列表末尾添加一个函数 for i in range(2): l ...
- Mono集成中使用api获取当前mono 调用堆栈的方法
// 在mono源代码层级中加如下两个api 可以获取堆栈字符串 这两个api我新加的,原来没有.基于原来的代码改的. // add by bodong#if PLATFORM_WIN32 __dec ...
- HTML5 Drag & Drop
一定要区分不同事件产生的对象 源元素 属性:draggable = "true" 事件: ondragstart:开始拖拽 ondragend:拖拽结束 目标元素 事件: ondr ...
- Pinpoint 一款强大的APM工具
背景 程序的监控一直是程序员最头痛的事情之一,现网程序有问题怎么办?看进程看端口 top/free/df 三件套?网络抓包?看日志?所以为了满足这些初级需求很多公司都做了主机监控,进程端口监听等功能, ...
- centOS7 设置mysql数据库外网可以访问
1.查看目前防火墙是否对外开发了3306端口 firewall-cmd --list-all 2.查看3306端口是否开放 firewall-cmd --query-port=3306/tcp no ...