mysql数据库索引优化【建议收藏】

article/2025/11/7 6:57:06

在我们程序员玩数据库的时候,经常会写sql,但是决定一个sql的好坏往往是效率,于是我们需要不断的去优化我们的sql,写一句让人称赞的sql是非常不容易的,也是需要大家有非常深厚的功底,所以优化路漫漫,我们慢慢来;在这里博主就给大家分享一下优化sql中常见的添加索引的优化方式,希望这篇博客对大家有帮助;

目录

一、为什么要添加索引?

二、添加索引的好处是什么?

1、提高查询效率:

2、降低系统开销:

3、提高数据完整性:

三、索引的概念是什么?

四、索引优化的方式有哪些?

1、确定需要创建的索引的列:

2、确定索引类型:

3、避免在索引列上使用函数或者表达式:

4、避免使用 OR 连接条件:

5、避免在表达式左侧使用运算符:


一、为什么要添加索引?

如果我们经常需要根据某个列进行查询,我们就可以在该列来创建索引从而实现查询速度

比如中华字典,我们经常根据首字母、偏旁部首、拼音音节进行查询,就可以对这些条件创建索引,从而让我们可以更快的找到某一个字;比如我们的书籍,文档,要是有一个目录他也会帮我们更快的找到我们想要的内容;所以“目录也就是传说中的索引”;惊不惊喜,意不意外,我们懂了索引的重要性,所以我们可以具体的学习一下在数据库如何去添加索引了。

二、添加索引的好处是什么?

1、提高查询效率:

        通过使用索引,数据库引擎可以快速定位到符合查询条件的记录,从而提高查询效率。

2、降低系统开销:

        使用索引可以减少数据库引擎的搜索范围,从而降低系统开销。

3、提高数据完整性:

        使用索引可以保证表中的数据唯一性和完整性。

三、索引的概念是什么?

        在数据中,索引是一种特殊的数据结构,它可以提高数据检索的速度在数据库中,索引通常是与表一起创建的,可以理解成是某一种数据结构,通过在索引中建立适当的数据结构,可以加速在数据库表中查找、排序、过滤数据的操作。

        假设有一个包含一百万条数据的用户表,其中包含了用户ID、姓名、年龄、邮箱等字段。如果要查询年龄小于25岁的用户,如果不使用索引,数据库查询某一个数据就需要遍历整个表,可想而知,这个过程将会非常耗时。

        如果我们在年龄列上创建了索引,数据库可以使用该索引直接定位到所有年龄小于25岁的数据行,而不是扫描整个表。这样可以大大提高查询性能。

        但是索引也不是万能的噢,如果使用不合理或不当使用的话,索引就会导致查询性能下降,从而影响数据库的整体性能。例如:如果在某个列上创建了太多的索引,会导致更新表时性能下降;总而言之,添加索引是好事,多了也会出事,“刚刚好”才是最好的状态;

        其实在这里我应该给大家分享一下索引的类型,但是太多了会影响各位看官的心情,我就单独提出来了,想了解的可以看另外一篇博客:mysql索引类型有哪些?_沐阳gg的博客-CSDN博客

四、索引优化的方式有哪些?

1、确定需要创建的索引的列:

可以通过查询SQL语句的执行计划,找出哪些SQL语句的查询效率比较低,然后确定需要创建索引的列。

具体如何查询慢sql,可以参考博主的另外一篇博客:mysql里面如何查询效率低的sql语句?_沐阳gg的博客-CSDN博客

例如:以下SQL语句查询效率比较低

SELECT * FROM table_name WHERE col1 = 'value1' AND col2 = 'value2';

在这个例子中,可以为‘col1’和'col2'分别创建索引:

CREATE INDEX idx_col1 ON table_name (col1);
CREATE INDEX idx_col2 ON table_name (col2);

2、确定索引类型:

不同的索引类型在不同的场景下具有不同的优势,需要根据具体的业务需求和场景来选择合适的索引类型。

例如:在以下 SQL 语句中,如果需要精确匹配 col1 的值,则可以使用 B+ 树索引:

SELECT * FROM table_name WHERE col1 = 'value1';

在这个例子中,可以为 col1 创建 B+ 树索引:

CREATE INDEX idx_col1 ON table_name (col1);

3、避免在索引列上使用函数或者表达式:

在索引列上使用函数或者表达式会导致索引失效,从而降低查询性能。

例如:在以下 SQL 语句中,如果需要在 col1 上使用函数,则可以将函数移动到 WHERE 子句之外:

SELECT * FROM table_name WHERE UPPER(col1) = 'VALUE1';

在这个例子中,可以将函数移动到 WHERE 子句之外,然后在 WHERE 子句中使用:

DECLARE @value1 VARCHAR(50) = 'value1';
SELECT * FROM table_name WHERE UPPER(col1) = UPPER(@value1);

4、避免使用 OR 连接条件:

在查询语句中使用 OR 连接条件会导致索引失效,从而降低查询性能。

例如,在以下 SQL 语句中,可以将 OR 连接条件拆分成两个查询语句:

SELECT * FROM table_name WHERE col1 = 'value1' OR col2 = 'value2';

可以将 OR 连接条件拆分成两个查询语句:

SELECT * FROM table_name WHERE col1 = 'value1';
SELECT * FROM table_name WHERE col2 = 'value2';

5、避免在表达式左侧使用运算符:

在查询语句中,将运算符放在表达式的左侧会导致索引失效,从而降低查询性能。

例如,在以下 SQL 语句中,可以将运算符放在表达式的右侧:

SELECT * FROM table_name WHERE col1 + 1 = 10;

可以将运算符放在表达式的右侧:

SELECT * FROM table_name WHERE col1 = 9;

大家有更好的意见也可以在评论区分享分享噢~~


http://chatgpt.dhexx.cn/article/KfhPRoI4.shtml

相关文章

MySQL索引优化

MySQL索引优化 一、优化索引的方法二、优化步骤前缀索引优化覆盖索引优化主键索引最好是自增的索引最好设置为NOT NULL防止索引失效 总结 一、优化索引的方法 这里说一下几种常见优化索引的方法: 前缀索引优化; 覆盖索引优化; 主键索引最好是…

Android底层到上层的开发流程

安卓系统整体框架图如下: 简单总结如下: 1、在kernel层编写你的驱动程序:生成设备文件节点跟上一层传输数据,主要调用函数copy_to_user和copy_from_user,注意赋节点权限问题。 2、在HAL层封装对上提供的函数接口&…

【Android】Android底层开发实战

本书分为四个部分:第一部分为预备知识篇,简要介绍嵌入式系统的定义与软硬件开发以及Android开发环境的搭建。第二部分为系统结构篇,主要介绍Android系统的源码结构、内核与相关工具以及环境库。第三部分为驱动设计篇,主要介绍Andr…

我做了几年的Android应用层开发,为什么还要去学习安卓系统知识?

作为一个工作了好几年的Android应用层开发者,我准备在工作之余干一件事情,那就是学习Android系统知识,为什么要做这个决定呢? 其主要原因是想在Android应用层开发进阶 这个说起来并非易事,可能在很多人的认知里&…

一个Android应用层开发如何转型深入Android Framework?

作为一个工作了好几年的Android应用层开发者,准备在工作之余干一件事情,那就是分享一些Android系统知识,为什么决定要做这个呢,理由如下: 帮助更多人转型Android系统开发 不知何时起,单纯的Android应用层…

android底层开发-android基础架构

android architecture 在安卓中,最经典的架构就是分四层,分别是application、framework、libraries、kernel四层,通过这四层将android的整个架构都丰满起来 其架构图如下 android 系统组成 Process FW: android 系统固件&#…

Android Framework 开发揭解密,移动开发者必须掌握的底层原理

作为过来人,发现很多学习者和实践者都在 Android Framework上面临着很多的困扰,比如: 工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会…

Android系统底层架构【译】

Android系统底层架构 转载请注明来源:http://blog.csdn.net/lifeshow 设备移植 Android提供了设备移植和支持方面有较大的自由度,可以制定自有的设备规范和驱动。通过硬件抽象层(HAL-Hardware Abstraction Layer),可以…

嵌入式Android底层开发

嵌入式Linux主要有这几部分&#xff1a; Bootloader&#xff1a;主要用于引导Linux内核到内存中&#xff0c;让内核进行自解压并运行 zImage&#xff1a;带自解压的Linux内核 <Board>.dtb&#xff1a;每个型号的主板都有对应的设备树(保存对应的设备型号等信息&#x…

android 底层系统开发,Android底层

概述-Android系统架构 Android系统架构 概述-Application Application Android平台不仅仅是操作系统&#xff0c;同时也包含了许多应用&#xff0c;如桌面&#xff0c;浏览器&#xff0c;视频客户端&#xff0c;摄像头等。用JAVA编写&#xff0c;可以被开发人员开发的其他应用程…

Android 开发之 ---- 底层驱动开发(二)

Android 设备驱动&#xff08;下&#xff09; MTD 驱动 Flash 驱动通常使用 MTD &#xff08;memory technology device )&#xff0c;内存技术设备。 MTD 的字符设备&#xff1a; /dev/mtdX 主设备号 90. MTD 的块设备&#xff1a; /dev/block/mtdblockX 主设备号 13. MTD 驱…

写给Android App开发人员看的Android底层知识(1)

这个系列的文章一共8篇&#xff0c;我酝酿了很多年&#xff0c;参考了很多资源&#xff0c;查看了很多源码&#xff0c;直到今天把它写出来&#xff0c;也是战战兢兢&#xff0c;生怕什么地方写错了&#xff0c;贻笑大方。 &#xff08;一&#xff09;引言 早在我还是Android菜…

读懂底层,才是安卓真正开始的时候

对于android开发&#xff0c;我们大部分工作都是在应用层&#xff0c;但为了体现"技术含量"&#xff0c;以及"知其所以然"&#xff0c;以便在遇到具体问题时不至于束手无策&#xff0c;因此有必要了解底层的工作机制。 比如Android NDK 开发可能在平时的项…

Android 开发之 ---- 底层驱动开发

说到 android 驱动是离不开Linux驱动的。Android内核采用的是Linux2.6内核&#xff08;最近Linux 3.3已经包含了一些Android代码&#xff09;。但Android并没有完全照搬Linux系统内核&#xff0c;除了对Linux进行部分修正&#xff0c;还增加了不少内容。android 驱动主要分两种…

Android 开发之 ---- 底层驱动开发(一)

驱动概述 说到 android 驱动是离不开 Linux 驱动的。Android 内核采用的是 Linux2.6 内核 &#xff08;最近Linux 3.3 已经包含了一些 Android 代码&#xff09;。但 Android 并没有完全照搬 Linux 系统内核&#xff0c;除了对Linux 进行部分修正&#xff0c;还增加了不少内容。…

Android底层开发

学习书籍&#xff1a;Android底层开发实践 使用代码&#xff1a;AOSP源码 带的行表示关键点&#xff1b; 橙色背景的文字表示&#xff1a;整编log分析的关键字 绿色“待补充”文字表示&#xff1a;有待补充内容 -----第三章 Android系统开发环境搭建 3.1 Android上的开…

ELK日志分析系统(二)之ELK搭建部署

文章目录 引言一、Elasticsearch 集群部署&#xff08;在Node1上操作&#xff09;1、准备环境2、部署安装Elasticsearch软件3、配置Elasticsearch主配置文件4、创建数据存放路径并授权5、查看node1节点信息 二、Elasticsearch 集群部署&#xff08;在Node2上操作&#xff09;1、…

ELK日志分析系统之ELK搭建部署

文章目录 配置ELK日志分析系统1.配置elasticsearch环境2.部署elasticsearch软件2.1 安装Elasticsearch软件2.2 加载系统服务2.3 修改elasticsearch主配置文件2.4 创建数据存放文件路径并授权2.5 启动elasticsearch2.6 查看node1节点信息2.7 查看集群状态信息Elasticsearch 集群…

运维必备——ELK日志分析系统

目录 一、ELK日志分析系统概述&#xff08;1&#xff09;传统日志服务器的优点与缺点和为什么要使用ELK日志分析系统&#xff08;2&#xff09;ELK日志分析系统日志的分类&#xff08;3&#xff09;ELK日志分析系统的分类——Elasticsearch&#xff1a;——Logstash&#xff1a…

ELK 日志分析系统

目录 引言一、ELK 日志分析系统简介1. 日志服务器2. ELK 是什么3. Logstash 四种工具4. 日志处理步骤 二、Elasticsearch 的基础核心概念1. 概述2. 关系型数据库与 Elasticsearch 对应的关系3. 核心概念 三、Logstash 介绍1. logStash 的主要组件2. LogStash 主机分类 四、Kiba…