PostgreSQL数据库通过索引优化查询

news2025/1/11 5:38:20

文章目录

  • 1.使用EXPLAIN分析查询计划
    • 1.1 Seq Scan:全表顺序扫描, 表示数据库将按顺序扫描整个表,适用于小表或无索引的情况。
    • 1.2 Index Scan: 基于索引扫描,但不只是返回索引列的值。
    • 1.3 IndexOnly Scan:基于索引扫描,但只返回索引列的值,简称为覆盖索引。
    • 1.4 Bitmap Heap Scan: 基于索引的扫描,使用位图索引进行扫描。
  • 2.分析查询计划总结
  • 3.创建索引优化查询
    • 3.1 创建索引
    • 3.2 创建覆盖索引(又称 INCLUDE 索引)
    • 3.3 创建复合索引

在数据库应用查询中,尤其是在大数据级(百万级)sql数据查询中,查询优化非常重要。
一、可以节省数据库服务器开销,防止数据库服务器并发导致的宕机;
二、提高用户体验,在百万级数据中可能会引发查询效率慢,需要加载老半天才能返回数据,影响用户体验;

1.使用EXPLAIN分析查询计划

-- 示例:使用EXPLAIN分析SELECT查询计划
EXPLAIN SELECT * FROM your_table WHERE your_condition;

EXPLAIN输出的执行计划包括以下关键信息:

  • 类型:Seq Scan(顺序扫描)、Index Scan(索引扫描)等。
  • Filter: 描述在执行计划中应用的过滤条件。
  • Rows Removed by Filter:表明过滤操作过滤了多少行记录。
  • Planning time: 表明生成查询计划的时间。
  • Execution time:表明了实际的sql执行时间,其中不包括查询计划的生成时间。

在执行计划中,不同的计划节点代表不同的执行操作。以下是常见的执行计划节点:

1.1 Seq Scan:全表顺序扫描, 表示数据库将按顺序扫描整个表,适用于小表或无索引的情况。

(1)分析查询sql示例:

EXPLAIN SELECT * FROM "202312_copy1" where name = 'a' 

(2)分析结果:

一般查询没有创建索引的表需要全表顺序扫描,explain会输出以下:
在这里插入图片描述
(cost=0.00…608.00 rows=2991 width=221)表明了这个节点的代价估计。

1.2 Index Scan: 基于索引扫描,但不只是返回索引列的值。

主要用来在where条件中存在的索引列时的扫描。

(1)分析查询sql示例:

EXPLAIN SELECT * FROM "test" where name = 'b' 

(2)分析结果:
在这里插入图片描述

1.3 IndexOnly Scan:基于索引扫描,但只返回索引列的值,简称为覆盖索引。

(1)分析查询sql示例:

EXPLAIN SELECT name FROM "test" where name = 'b' 

(2)分析结果:
在这里插入图片描述

1.4 Bitmap Heap Scan: 基于索引的扫描,使用位图索引进行扫描。

BitmapHeap Scan,把BitmapIndex Scan 返回的Bitmap 结构转换为元组结构;
BitmapIndex Scan和Index Scan很相似,都是基于索引的扫描,但是BitmapIndex Scan节点每次执行返回的是一个位图而不是一个元组,其中位图中每一个代表扫描到的一个数据块。而BitmapHeap Scan一般会作为BitmapIndex Scan的父节点,将BitmapIndex Scan 返回的Bitmap 结构转换为元组结构。
这样做最大的好处就是把Index Scan的随机读转换成了按照数据块的物理顺序读取,在数据量比较大的时候,这会大大提升扫描的性能。
(1)分析查询sql示例:

EXPLAIN SELECT * FROM "test" where name = 'a' 

(2)分析结果:
在这里插入图片描述

2.分析查询计划总结

-一般来说,index scan 要比sep scan快,但是如果获取的结果集占所有结果的比重很大时,这是index scan因为要先扫描索引,再读表数据,反而不如全表扫描来的快。如果获取的结果集占比比较小,但元组数很多时,可能 Bitmap Index Scan的性能要比index scan好。如果获取的结果集能够被索引覆盖,则index only scan因为不用去读取数据表,只去读取索引,所以一般性能最好,但是如果VM文件还未生成,可能性能就会比index scan 差些。

3.创建索引优化查询

3.1 创建索引

根据查询条件创建对应的索引,提高检索速度。

-- 示例:创建索引
CREATE INDEX idx_your_column ON your_table(your_column);

3.2 创建覆盖索引(又称 INCLUDE 索引)

在索引中包含所有查询需要的字段,避免对表的实际数据进行访问。

-- 示例:创建覆盖索引
CREATE INDEX idx_your_covering_index ON your_table(your_column) INCLUDE(your_other_column);

3.3 创建复合索引

对于涉及多个列的查询,使用复合索引可以提高性能。确保复合索引的列顺序与查询的条件一致。
复合索引是在多个列上创建的索引,用于优化涉及这些列的查询。复合索引的顺序很重要,最左匹配原则决定了它的有效性。

-- 示例:创建复合索引
CREATE INDEX idx_your_compound_index ON your_table(column1, column2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1896433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库-Windows部署MySQL环境

Windows部署MySQL环境​​​​​​ 一、下载mysql数据库 进入MySQL官方网站(MySQL :: MySQL DownloadsMySQL),随后按如下红框方式操作: ​ ​ ​ ​ 这里选择的是离线安装,第一个是在线安装 下载好安装包后开始…

昇思25天学习打卡营第十二天|Diffusion扩散模型

背景 提供免费算力支持,有交流群有值班教师答疑的华为昇思训练营进入第十二天了。 今天是第十二天,从第十天开始,进入了应用实战阶段,前九天都是基础入门阶段,具体的学习内容可以看链接 基础学习部分 昇思25天学习打卡…

使用 OpenCV 和 Python 进行车道检测和物体检测(YOLO)

本项目旨在开发一个集车道检测与物体检测功能于一体的智能视觉分析系统,利用先进的计算机视觉技术和深度学习模型,实现实时的道路场景理解和目标识别。系统主要依托OpenCV这一强大的计算机视觉库,以及Python作为编程语言,融合了车…

【笔试记录】腾讯音乐 | 20230903 | cpp (更新ing)

1 完美数 1.1 题目描述 小红定义一个数为“完美数”&#xff0c;当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。 小红拿到了一个大小为 n&#xff08;2 < n < 2000&#xff09;的数组 a&#xff0c;她希望选择数组中的两个元素&#xff08;1 …

KEYSIGHT N1092系列,DCA-M系列采样示波器连接与自检?

KEYSIGHT N1092系列 采样示波器&#xff0c;虽然省去了屏幕和操作系统&#xff0c;但根据不同的型号&#xff0c;可以配备不同数量的光口和电口&#xff0c;满足各种测试需求。本次介绍的具体型号为N1092D&#xff0c;它拥有4个光口&#xff0c;能够进行多种测试。 测试步骤详解…

14-26 剑和侠客 – 预训练模型三部曲3 – 机器人时代来临

概述 在第 1 部分和第 2 部分中&#xff0c;我们讨论了适用于文本和图像任务的预训练模型&#xff0c;并探索了当今常用的模型。我们分析了这些模型的架构以及如何将它们用于特定任务。实现 AGI 所需的两个主要支柱是语言理解和机器的视觉能力。有许多任务与这两种能力有关。 …

日本最新型高达式巨型机器人承担铁路维护任务

日本有制造现实生活中的高达式巨型机器人的历史&#xff0c;但它们往往是用于娱乐目的&#xff0c;而不是实际应用。不过&#xff0c;日本刚刚开始使用一个 40 英尺高的人形机器人来维护铁路线。 大约两年前&#xff0c;西日本铁路公司&#xff08;JR 西日本&#xff09;制造了…

长难句打卡6.26

Too often we believe that a new job, bigger house or better car will be the magic silver bullet that will allow us to finally be content, but the reality is these things have very little lasting impact on our happiness levels. magic silver bullet 灵丹妙药 …

(三)共享模型之管程

线程安全问题 案例 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;结果是 0 吗&#xff1f; Slf4j(topic "c.ThreadSafe") public class ThreadSafe {public static int counter 0;public static void …

NFT音乐版权系统的技术难点

NFT音乐版权系统是指利用区块链技术和NFT技术来管理和交易音乐版权的系统。该系统涉及多项技术&#xff0c;其开发和应用存在以下技术难点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 音乐作品的数字版权确权 音乐作品的数字…

《向量数据库指南》——Milvus Cloud查询增强如何提升 RAG Pipeline 效果?

查询增强 1.假设性问题 这一方法首先使用LLM为每一条文档块生成一些假设问题,这些文档块可以回答与之对应的假设问题。在RAG阶段,进行一个query-to-query的搜索,先搜索到相关的假设问题,然后找到对应的文档块,再通过它们生成最后的回答。 这里的query-to-query指的是embed…

7月开强化,考研数学保底110分真的很难吗?

七月开始强化是正常时间 不要因为进度而感到焦虑&#xff0c;因为进度是很主观的因素&#xff0c;无法衡量学习效果&#xff01;所以&#xff0c;不要和比人比进度&#xff0c;也不要赶进度&#xff0c;一步一个脚印&#xff0c;踏踏实实的学习才是王道&#xff01; 虽然我不…

MicroCap声学仿真介绍(一)

MicroCap是一款基于电路分析的仿真软件&#xff0c;基于集总参数的电力声的转换&#xff0c;我们可以用这个软件完成常用的声学仿真工作。目前这个软件已经开源了&#xff0c;免费使用&#xff0c;最新版已经到MC12&#xff0c;但里面不自带声学库&#xff0c;后来找到了MC8&am…

react v18 less使用(craco)

方案一、弹出配置&#xff08;不推荐&#xff09; 安装依赖&#xff1a;yarn add less less-loader 首先 执行 yarn eject 弹出配置项文件&#xff08;注意&#xff1a;弹出配置不可逆&#xff01;&#xff09; 在 config 文件夹中 找到 webpack.config.js&#xff0c;在如图…

Vue 详情实战涉及从项目初始化到功能实现、测试及部署的整个过程

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

视频提取字幕怎么弄?5个快速获取视频字幕的方法

在忙碌而又充满活力的生活中&#xff0c;我们常常在通勤路上和午休间隙通过视频来获取信息和放松心情。 但有时候&#xff0c;我们想把视频里那些令人难忘的瞬间或关键信息保存下来&#xff0c;方便以后回顾或者分享。然而&#xff0c;手动摘录不仅费时&#xff0c;还容易漏掉…

BugkuCTF-Crypto(1-5)

题&#xff1a;抄错的字符 题目作者: Aman 题目描述:老师让小明抄写一段话&#xff0c;结果粗心的小明把部分数字抄成了字母&#xff0c;还因为强迫症把所有字母都换成大写。你能帮小明恢复并解开答案吗&#xff1a;QWIHBLGZZXJSXZNVBZW 分析&#xff1a; 数字和字符可能的转…

数据库管理-第217期 Oracle的高可用-02(20240704)

数据库管理217期 2024-07-04 数据库管理-第217期 Oracle的高可用-02&#xff08;20240704&#xff09;1 GDS简介2 GDS架构2.1 全局数据服务池2.2 全局数据服务域2.3 全局服务管理2.4 全局数据服务目录2.5 Oracle通知服务 3 GDS简图3.1 负载均衡3.2 只读服务失败转移3.3 多主复制…

7.1 动态规划背包问题综述

动态规划中的背包问题是一类经典的优化问题&#xff0c;主要涉及到在给定的限制条件下&#xff08;如背包容量&#xff09;&#xff0c;如何选择物品集合以达到某种最优目标&#xff08;如价值最大&#xff09;。这类问题通常可以细分为几种类型&#xff0c;包括0-1背包问题、完…

Android的图书交易APP-计算机毕业设计源码25753

摘 要 在数字化与移动互联网迅猛发展的今天&#xff0c;人们对于图书的需求与消费方式也在悄然改变。为了满足广大读者对图书的热爱与追求&#xff0c;我们倾力打造了一款基于Android平台的图书交易APP。这款APP不仅汇聚了海量的图书资源&#xff0c;提供了便捷的交易平台&…