加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中的索引如何进行优化

发布时间:2023-07-01 15:13:09 所属栏目:MySql教程 来源:
导读:这篇文章主要介绍了MySQL中的索引如何优化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中的索引如何优化文章都会有所收获,下面我们一起来看看吧。

使用索引优化

这篇文章主要介绍了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 查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据
 
但是再加有个password

5、 如果MySQL评估使用索引比全表更慢,则不使用索引。is NULL , is NOT NULL有时有效,有时索引失效。in走索引,not in索引失效。单列索引和复合索引,尽量使用符合索引
 
验证
 
创建了单一的三个索引,最后面where全使用了但explain显示只用了index_name
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!