【MySQL】索引优化原则

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

前面几篇博文谈到索引使用场景和explain命令帮助我们分析索引的执行情况,今天进入正题,来谈谈索引优化的原则。

1、全值匹配

查询语句尽量使用全值匹配。

2、左前缀原则

如果一个索引是组合索引,索引了多列,要遵循左前缀原则,即查询从索引的左前缀开始,不能跳过索引中间的列

3、不要在索引列上操作

操作包括:计算、函数、自动或手动的类型转换,不要在索引列上做上述任何操作,否则索引失效并转为全表扫描。

在这里插入图片描述

4、范围条件右边的列索引全失效

当组合索引中出现范围条件,那么该范围条件右边的列索引全部失效。因此在设计和使用索引时,应把经常进行范围查询的列作为索引的最右列。

5、按需取数据,少用select *

在查询中少用select *,否则MySQL需要遍历结果列存在哪些字段。同时,应尽量使用覆盖索引,能避免二次查表。

6、避免使用 != 或 <>

在使用不等于(!= 或 <>)时,无法使用索引,导致全表扫描。

7、避免is null 或 is not null

判断空值的查询条件索引失效,导致全表扫描。

8、避免like以通配符开头

查询条件like以通配符%开头,如 name like ("%abc"),索引失效,导致全表扫描。

那么如果业务需要必须要用通配符%开头怎么办?

答案是:使用覆盖索引

先看看表中有哪些数据:

建立索引NAME和age的组合索引:

覆盖索引,生效:

非覆盖索引,失效:

9、少用or

使用or来连接查询条件时,索引失效。


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

相关文章

MySQL:索引优化、查询优化

一、哪些情况适合创建索引 1、字段的数值有唯一性的限制&#xff1b; 业务上具有唯一特性的字段&#xff0c;即使是组合字段&#xff0c;也必须建成唯一索引&#xff1b; 说明&#xff1a;创建唯一索引会影响添加的速度&#xff08;在添加的时候会维护索引&#xff09;&…

Mysql-索引优化

一、索引基本知识 1、索引的优点 很大程度上减少服务器扫描的数据量很大程度上避免服务器排序和临时表将随机IO变成顺序IO 2、索引的用处 使用索引列可以快速查找Where条件的行数据 mysql> explain select * from emp where empno 7469; ----------------------------…

MySQL索引优化总结

前言&#xff1a;相信大家都知道索引可以大大提高MySQL的检索速度&#xff0c;但是真正在平时工作中写SQL&#xff0c;真的会考虑到这条SQL如何能够用上索引提升执行效率&#xff1f;本篇博客详细的介绍了索引优化的20个原则&#xff0c;只要在工作中能够随时应用到&#xff0c…

【MySQL】深入理解MySQL索引优化器原理(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

mysql 索引优化

一、mysql索引建立原则 二、通过 EXPLAIN 分析 SQL 执行计划 可以知道以下内容&#xff1a; 假设现在我们使用 EXPLAIN 命令查看当前 SQL 是否使用了索引&#xff0c;先通过 SQL EXPLAIN 导出相应的执行计划如下&#xff1a; 下面对图示中的每一个字段进行一个说明&#x…

【MySQL】MySQL索引优化——从原理分析到实践对比

目录 使用TRACE分析MySQL优化 开启TRACE TRACE 结果集 ORDER BY & GROUP BY 优化 优化方式 分页优化 不同场景的优化方式 JOIN关联优化 算法介绍 优化方式 COUNT优化 优化方式 使用TRACE分析MySQL优化 某些情况下&#xff0c;MySQL是否走索引是不确定的[,,_,,…

MySQL索引常见面试题(2022版)

目录 为什么要建立索引&#xff1f; 哪些情况适合建立索引&#xff1f; 哪些情况下不适合建索引&#xff1f; 为什么索引是使用B树&#xff1f;&#xff08;重点&#xff09; 索引分为那几类&#xff1f; 什么是聚簇索引&#xff1f;&#xff08;重点&#xff09; 使用聚…

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

在我们程序员玩数据库的时候&#xff0c;经常会写sql&#xff0c;但是决定一个sql的好坏往往是效率&#xff0c;于是我们需要不断的去优化我们的sql&#xff0c;写一句让人称赞的sql是非常不容易的&#xff0c;也是需要大家有非常深厚的功底&#xff0c;所以优化路漫漫&#xf…

MySQL索引优化

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

Android底层到上层的开发流程

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

【Android】Android底层开发实战

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

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

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

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

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

android底层开发-android基础架构

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

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

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

Android系统底层架构【译】

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

嵌入式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菜…