0

0

Mysql索引优化方法

小云云

小云云

发布时间:2018-02-09 15:41:49

|

2641人浏览过

|

来源于php中文网

原创

本文主要和大家分享mysql索引优化方法,希望能帮助到大家。索引是存储引擎用于快速找到记录的一种数据结构。尤其是当表的数据量越来越大的时候,正确的索引对查询性能的提升尤为明显。但在日常工作中,索引却常常被忽略,甚至被误解。本文将为大家简单介绍下mysql索引优化的原理与注意事项。

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

一、索引的类型

1)B-Tree索引

B-Tree索引是用的最多的索引类型了,而且大多数存储引擎都支持B-Tree索引。

B-Tree本身是一种数据结构,其是为磁盘或其他直接存取的辅助设备而设计的一种平衡搜索树。Mysql中的B-Tree索引通常是B-Tree的变种B+Tree实现的。其结构如下:

Mysql索引优化方法

B+Tree的特点是,数据都存储在叶子节点,并且每个叶子节点的数据都是按相同顺序(升序或降序)排列存储的,再者相邻的叶子节点都用指针连接在一点,这种结构非常适合于范围查找。

B-Tree索引能够显著加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点逐层往下进行搜索,这大大缩小了存储引擎扫描数据的范围,因此对查询速度的提升非常明显。

2)Hash索引

Hash索引,顾名思义,就是通过哈希表实现的索引。其特点是只有精确匹配索引的所有列才有效。对于每一行数据,存储引擎都会对所有索引列计算一个哈希码,Hash索引把哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。

在Mysql中,目前只有Memory引擎显式支持Hash索引,而且由于Hash索引不支持范围查找,也不支持排序,更不支持部分索引列匹配查找,所以Hash索引用的比较少。

下文将着重介绍B-Tree索引的用法。

为了下文叙述方便,我们将假设有一个user表,其字段如下:

id:bigint类型,主键

name:varchar类型

age:int类型

interest:varchar类型

并且在name、age、interest上建立了一个联合索引index_1,索引顺序为(name,age,interest),这个索引顺序非常重要,后文将会提及。

二、B-Tree索引的用法

1)全值匹配

全值匹配指的是和索引中所有列进行匹配,如对上述user表查询 where name='aaa' and age=20 and interest='篮球' 是可以使用到索引的所有列的。

2)匹配最左前缀

匹配最左前缀是指只使用到多列索引的左边若干列。如对上述user表查询 where name = 'aaa' 是可以使用到索引的,并且只使用到索引的第一列。

3)匹配列前缀

匹配列前缀是指只匹配某一列的开头部分,如对上述user表查询 where name like 'aaa%' 是可以使用到索引的,注意是匹配列的开头部分,如果查询的是 where name like '%aaa'就不能使用到索引了。

4)匹配范围值

如对上述user表查询 where name > 'aaa' and name

5)精确匹配某一列并范围匹配另外一列

如对上述user表查询 where name='aaa' and age >10,可以使用到索引,并且使用到索引的前2列。

三、B-Tree索引的限制

1)如果不是按照索引的最左列开始查找,则无法使用索引。

如对上述user表查询 where age=20则无法使用到索引,因为age不是索引列中的最左数据列。

2)不能跳过索引中的列。

如对上述user表查询 where name='aaa' and interest='足球',则只能使用到索引的第一列,因为where条件中没有包含age这一列。

相关推荐:

mysql的索引优化如何使用

MySQL高级十三——通过索引优化SQL

MySQL Order By索引优化方法

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 810人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号