news 2026/6/7 8:19:57

索引的使用及设计规则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
索引的使用及设计规则

索引列运算: 不要在索引列上进行运算操作,索引将失效。

explain select * from tb_user where phone='17799990015'; explain select * from tb_user where phone=17799990015;

类型不一致时,索引不生效,查看一下执行计划:

查看联合索引的情况;字符串不加引号的情况下,索引将会失效。

explain select * from tb_user where profession='软件工程' and age=31 and status='0'; explain select * from tb_user where profession='软件工程' and age=31 and status=0;

模糊查询,如果是尾部进行模糊匹配,索引不会失效;如果是头部进行模糊匹配,索引失效。

explain select * from tb_user where profession like '软件%'; explain select * from tb_user where profession like '%工程';

or连接的条件

用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。

explain select * from tb_user where id=10 or age=23; explain select * from tb_user where phone='17799990017' or age=23;

数据分布影响:

如果MySQL评估使用索引比全表更慢,则不使用索引。

explain select * from tb_user where phone >='17799990020';

explain select * from tb_user where phone >='17799990000';

explain select * from tb_user where phone >='17799990010';

explain select * from tb_user where phone >='17799990013';

表中有这些索引;

SQL提示:是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。

use index:

explain select * from tb_user use index(idx_user_pro) where profession='软件工程';

ignore index:

explain select * from tb_user ignore index(idx_user_pro) where profession='软件工程';

force index:

explain select * from tb_user force index(idx_user_pro) where profession='软件工程';

show index from tb_user; explain select * from tb_user where profession='软件工程'; // mysql数据库使用的是联合索引

索引使用(覆盖索引)

尽量使用覆盖索引(查询使用 索引,并且需要返回的列,在该索引中已经全部能够找到),减少select *。

explain select id, profession from tb_user where profession = '软件工程' and age = 31 and status = '0';

explain select id, profession, age, status from tb_user where profession = '软件工程' and age = 31 and status = '0';

explain select id, profession, age, status, name from tb_user where profession = '软件工程' and age = 31 and status = '0';

explain select * from tb_user where profession = '软件工程' and age = 31 and status = '0';

using index: 查找使用了索引,但是查找的列都在索引列里,不需要回表查询。

前缀索引:

当字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。此时可用只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提供索引效率。

前缀索引会有sub part;显示所使用字段的前缀长度。

explain select * from tb_user where email='daqiao666@sina.com';

单列索引与联合索引:

单列索引: 即一个索引只包含单个列;

联合索引: 即一个索引包含了多个列。

在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立索引时,建议使用联合索引。

多条件联合查询时,MySQL优化器会评估哪个字段的索引效率更高,会选择该索引完成本次查询。

(7)索引设计原则

  1. 针对于数据量较大,且查询比较频繁的表建立索引。

  2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。

  3. 尽量选择区分度高的列作为索引,建立建立唯一索引,区分度越高,使用索引的效率越高。

  4. 如果时字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。

  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。

  6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。

  7. 如果索引列不能存储NULL值,请在创建表时使用not null约束它。当优化器知道每列是否包含NULL值时,它可以更好地确定哪个索引最有效地用于查询。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 20:23:49

24、探索适用于缩放技术的高带宽流水线缓存架构

探索适用于缩放技术的高带宽流水线缓存架构 1. 引言 微处理器性能的显著提升对内存系统提出了更高要求。计算机架构师们正在探索线程级并行性,以利用CMOS技术的持续改进来提高性能。同时多线程(Simultaneous Multithreading,SMT)技术通过在宽发射处理器中重叠多个线程来提…

作者头像 李华
网站建设 2026/5/30 2:56:13

跨平台畅玩Minecraft基岩版:终极免费启动器完整指南

跨平台畅玩Minecraft基岩版:终极免费启动器完整指南 【免费下载链接】mcpelauncher-manifest The main repository for the Linux and Mac OS Bedrock edition Minecraft launcher. 项目地址: https://gitcode.com/gh_mirrors/mc/mcpelauncher-manifest 还在…

作者头像 李华
网站建设 2026/6/4 0:56:48

Multisim主数据库在高职电子课程中的实践探索:项目应用

Multisim主数据库在高职电子教学中的实战落地:从“画图”到“设计”的跃迁你有没有遇到过这样的课堂场景?学生兴冲冲地打开Multisim,想做一个音频放大电路,结果一搜“NE5532”,弹出的却是“元件未找到”;或…

作者头像 李华
网站建设 2026/5/30 2:56:13

终极clawPDF使用指南:开源PDF转换神器完整解析

终极clawPDF使用指南:开源PDF转换神器完整解析 【免费下载链接】clawPDF Open Source Virtual (Network) Printer for Windows that allows you to create PDFs, OCR text, and print images, with advanced features usually available only in enterprise solutio…

作者头像 李华
网站建设 2026/5/28 19:38:30

自动化Gmail账号生成器:零基础快速创建无限邮箱

自动化Gmail账号生成器:零基础快速创建无限邮箱 【免费下载链接】gmail-generator ✉️ Python script that generates a new Gmail account with random credentials 项目地址: https://gitcode.com/gh_mirrors/gm/gmail-generator 在当今数字化生活中&…

作者头像 李华
网站建设 2026/5/30 3:47:02

终极指南:Flashtool深度解析与索尼设备刷机实战

你是否曾经面对过这样的情况:索尼Xperia设备系统卡顿,想要刷入新固件却无从下手;或者设备变砖急需救援,却找不到合适的工具?今天,让我们一起探索Flashtool这个强大的开源刷机工具,它将彻底改变你…

作者头像 李华