服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

2023-02-21 13:51阳862 Mysql

索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。本文主要来讲讲索引优化的方法,希望对大家有所帮助

使用索引优化

索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。

数据准备

use world;


create table tb_seller(
	sellerid varchar(100),
	name varchar(100),
	nickname varchar(50),
	password varchar(60),
	status varchar(1),
	address varchar(100),
	createtime datetime,
	primary key(sellerid)
);


insert into tb_seller values('alibaba','阿里巴巴','阿里小店','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00'),
							('baidu','百度科技有限公司','百度小店','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00'),
							('huawei','华为科技有限公司','华为小店','e10adc3949ba59abbe057f20f883e','0','北京市','2088-01-01 12:00:00'),
							('itcast','传智播客教育科技有限公司','传智播客','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00'),
							('itheima','黑马程序员','黑马程序员','e10adc3949ba59abbe057f20f883e','0','北京市','2088-01-01 12:00:00'),
							('luoji','罗技科技有限公司','罗技小店','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00'),
							('oppo','oppo科技有限公司','oppo官方旗舰店','e10adc3949ba59abbe057f20f883e','0','北京市','2088-01-01 12:00:00'),
							('ourpalm','掌趣科技股份有限公司','掌趣小店','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00'),
							('qiandu','千度科技','千度小店','e10adc3949ba59abbe057f20f883e','2','北京市','2088-01-01 12:00:00'),
							('sina','新浪科技有限公司','新浪官方旗舰店','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00'),
							('xiaomi','小米科技','小米官方旗舰店','e10adc3949ba59abbe057f20f883e','1','西安市','2088-01-01 12:00:00'),
							('yijia','宜家家居','宜家官方旗舰店','e10adc3949ba59abbe057f20f883e','1','北京市','2088-01-01 12:00:00');

-- 创建组合索引
create index index_seller_name_sta_addr on tb_seller(name,status,address);

避免索引失效应用-全值匹配

该情况下,索引生效,执行效率高。

-- 避免索引失效应用-全值匹配
-- 全值匹配,和字段匹配成功即可,和字段顺序无关
explain select * from tb_seller ts where name ='小米科技' and status ='1' and address ='北京市';

explain select * from tb_seller ts where status ='1' and name ='小米科技' and address ='北京市';

避免索引失效应用-最左前缀法则

该情况下,索引生效,执行效率高。

-- 避免索引失效应用-最左前缀法则
-- 如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始,并且不跳过索引中的列
explain select * from tb_seller ts where name='小米科技';-- key_lem:403
explain select * from tb_seller ts where name='小米科技' and status ='1';-- key_lem:410
explain select * from tb_seller ts where status ='1' and name='小米科技' ;-- key_lem:410,依然跟顺序无关

-- 违反最左前缀法则,索引失效
explain select * from tb_seller ts where  status ='1';-- 违反最左前缀法则,索引失效

-- 如果符合最左前缀法则,但是出现跳跃某一列,只有最左列索引生效
explain select * from tb_seller where name='小米科技' and address='北京市';-- key_lem:403

MySQL中索引的优化的示例详解

避免索引失效应用-其他匹配原则

该情况下,索引生效,执行效率高。

1、情况一

MySQL中索引的优化的示例详解

-- 避免索引失效应用-其他匹配原则
-- 范围查询右边的列,不能使用索引
explain select * from tb_seller  where name= '小米科技' and status >'1' and address='北京市';-- key_lem:410,没有使用status这个索引
-- 不要在索引列上进行运算操作,索引将失效。
explain select * from tb_seller where substring(name,3,2) ='科技';-- 没有使用索引
-- 字符串不加单引号,造成索引失效。
explain select * from tb_seller where name='小米科技' and status = 1 ;-- key_lem:403,没有使用status这个索引

2、 情况二

explain中的extra列

extra 含义
using filesort 说明mysq|会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,称为“文件排序" ,效率低。
using temporary 需要建立临时表(temporary table)来暂存中间结果,常见于order by和group by;效率低
using index SQL所需要返回的所有列数据均在一棵索引树上,避免访问表的数据行,效率不错
using where 在查找使用索引的情况下,需要回表去查询所需的数据
using index condition 查找使用了索引,但是需要回表查询数据
using index;using where 查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

但是再加有个password

MySQL中索引的优化的示例详解

3、情况三

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

4、情况四

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

5、 如果MySQL评估使用索引比全表更慢,则不使用索引。is NULL , is NOT NULL有时有效,有时索引失效。in走索引,not in索引失效。单列索引和复合索引,尽量使用符合索引

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

MySQL中索引的优化的示例详解

验证

MySQL中索引的优化的示例详解

创建了单一的三个索引,最后面where全使用了但explain显示只用了index_name

到此这篇关于MySQL中索引的优化的示例详解的文章就介绍到这了,更多相关MySQL索引优化内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_63318044/article/details/129110281

延伸 · 阅读

精彩推荐
  • MysqlMysql+Keepalived实现双主热备方式

    Mysql+Keepalived实现双主热备方式

    这篇文章主要介绍了Mysql+Keepalived实现双主热备方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    z.haoui5872022-11-29
  • MysqlMysql 删除重复数据保留一条有效数据(最新推荐)

    Mysql 删除重复数据保留一条有效数据(最新推荐)

    这篇文章主要介绍了Mysql 删除重复数据保留一条有效数据,实现原理也很简单,mysql删除重复数据,多个字段分组操作,结合实例代码给大家介绍的非常详细...

    蕃薯耀6362023-02-09
  • MysqlMySql数据库中Select用法小结

    MySql数据库中Select用法小结

    在程序开发中数据库是必要知识点,今天小编给大家介绍mysql数据库中的select用法,包括条件筛选、指定筛选和分组显示查询语句的写法,非常不错,对m...

    mysql教程网4152020-06-28
  • MysqlMysql 报Row size too large 65535 的原因及解决方法

    Mysql 报Row size too large 65535 的原因及解决方法

    这篇文章主要介绍了Mysql 报Row size too large 65535 的原因及解决方法 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    issac球球13762020-06-15
  • MysqlMySQL中SQL Mode的查看与设置详解

    MySQL中SQL Mode的查看与设置详解

    在本篇文章里小编给各位分享的是关于MySQL中SQL Mode的查看与设置详解内容,需要的朋友们可以参考下。...

    藏色散人10962021-01-10
  • MysqlMySQL下载安装详情图文教程

    MySQL下载安装详情图文教程

    本文通过图文并茂的形式给大家介绍了MySQL下载安装详情,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    笨笨熊咦2622020-11-30
  • MysqlMysql允许外网访问设置步骤

    Mysql允许外网访问设置步骤

    本文给大家分享Mysql允许外网访问设置步骤,通过简单的五步操作就可以实现mysql允许外围访问功能,非常不错,需要的朋友参考下吧...

    拼搏进取87352020-06-27
  • Mysql更改Mysql root用户密码

    更改Mysql root用户密码

    这篇文章主要介绍了更改Mysql root用户密码的相关资料,需要的朋友可以参考下 ...

    baozhengw4352020-06-02