【转】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管理线上业 ...
随机推荐
- 极简 Node.js 入门 - 3.3 文件写入
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- springMVC入门(一)------springMVC基本概念与安装
springMVC简介 springMVC是一个基于MVC的web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. springMVC安装 本例中使用 ...
- AltiumDesigner画图不求人11 | 提高AD20启动速度的方法七选择手动释放工程 | 视频教程 | 你问我答
往期文章目录 AD画图不求人1 | AD20软件安装视频教程 | 含软件安装包 AD画图不求人2 | 中英文版本切换 AD画图不求人3 | 高亮模式设置 AD画图不求人4 | 双击设计文件无法启动Al ...
- Synergy--跨平台的键鼠共享工具
目前的状态,Windows并没有彻底放弃使用,现在一个电脑桌上摆放了一台Mac pro 一台Windows,两个笔记本都是15寸的,如果想要方便的使用外设鼠标键盘,整个桌子会异常的臃肿,鼠标键盘太占地 ...
- LR与LR?
目录 逻辑回归与线性回归 逻辑回归 1.建立目标函数 2. 梯度求解 3. 实现 线性回归 1. 建立目标函数 2. 求解 3. 实现 逻辑回归与交叉熵 逻辑回归与线性回归 逻辑回归 线性回归 目标函 ...
- 终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的
一:背景 1. 讲故事 前几天有位朋友让我有时间分析一下 aspnetcore 中为什么向 ServiceCollection 中注入的 Class 可以做到 Singleton,Transient, ...
- Android开发之http网络请求返回码问题集合。
HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 一.1xx(临时响应) 表示临时响 ...
- tars 问题汇总
1. 节点 ip地址变了如何解决.后台不可以改. 2. [ok] 服务如何在本地运行../HelloGo --config.conf
- unity webview
uniwebview http://uniwebview.onevcat.com/manual Unity3D研究院之在Android中打开WebView(三十) http://www.xuanyus ...
- 初学WebGL引擎-BabylonJS:第2篇-基础模型体验
此次学习进度会比之前快很多,有了合适的学习方法后也就会有更多的乐趣产生了. 接上一章代码 上章代码 <!DOCTYPE html> <html> <head> &l ...