MySQL中使用索引优化

目录

一.使用索引优化

数据准备

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

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

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

1、

2、 

3、

4、

5、


 

一.使用索引优化

索引是数据库优化最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的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

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

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

1、

 

-- 避免索引失效应用-其他匹配原则
-- 范围查询右边的列,不能使用索引
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

 3、

 

 4、

 

 

 

 

5、

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

 

 

 

 验证

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

 

阳862
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
mysql索引详解
学Java,找哪吒
07-07 10万+
MySQL的存储引擎架构将查询处理与数据的存储/提取相分离
mysql 索引使用优化
congge
07-17 1万+
mysql 索引使用优化
MySQL索引性能优化分析
热门推荐
张彦峰的博客
04-07 172万+
总结MySQL索引性能优化,主要集索引的背景介绍以及索引的高效创建、使用和查询等,最有给出除了索引的一些其他优化思路
MySQL索引优化
mz474920631的博客
06-16 1万+
这里说一下几种常见优化索引的方法:前缀索引顾名思义就是使用某个字段字符串的前几个字符建立索引,那我们为什么需要使用前缀来建立索引呢?使用前缀索引是为了减小索引字段大小,可以增加一个索引存储的索引值,有效提高索引的查询速度。在一些大字符串的字段作为索引时,使用前缀索引可以帮助我们减小索引项的大小。不过,前缀索引有一定的局限性,例如:覆盖索引是指 SQL query 的所有字段,在索引 B+Tree 的叶子节点上都能找得到的那些索引,从二级索引查询得到记录,而不需要通过聚簇索引查询获得,可以避免回表
mysql 索引优化
GuoWangWang11的博客
07-12 3705
mysql索引优化
MySQL索引使用方法
qq_27198345的博客
05-03 1万+
MySQL索引使用方法
mysql索引优化
LJJ1338的博客
09-10 1932
SQL如下: CREATE TABLE IF NOT EXISTS staffs( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(24) NOT NULL DEFAULT "" COMMENT'姓名', age INT NOT NULL DEFAULT 0 COMMENT'年龄', pos VARCHAR(20)...
MySQL索引优化(超详细)
weixin_55816781的博客
05-10 6115
MySQL索引优化,涉及到索引介绍,性能分析,查询优化,慢查询日志。
MySQL索引优化总结
何哥的博客
09-30 5986
前言:相信大家都知道索引可以大大提高MySQL的检索速度,但是真正在平时工作SQL,真的会考虑到这条SQL如何能够用上索引提升执行效率?本篇博客详细的介绍了索引优化的20个原则,只要在工作能够随时应用到,相信你写出的SQL能够命索引,效率杠杠的。 一、索引的分类 1.1、普通索引、主键索引和唯一索引 1.2、聚集索引和非聚集索引 1.3、联合索引最左匹配原则 1.4、索引覆盖和回表 1.5、前缀索引 1.6、索引合并 1.7、索引下推 二、索引优化规则 查询的条...
MySQL索引优化、查询优化
xiaozhang960825的博客
03-23 3487
索引选择及优化
MySQL Order By索引优化方法
09-11
在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序
Mysql使用索引实现查询优化
09-10
索引的目的在于提高查询效率,本文给大家介绍Mysql使用索引实现查询优化技巧,涉及到索引的优点等方面的知识点,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
Mysql索引步骤及优化
12-14
MySQL索引的概念  索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。  ...
【Text2SQL 经典模型】TypeSQL
VLyb
05-23 1031
借助于数据库的 table schema 检索和 knowledge graph 的检索,为 question 的每个 word 标注一个 type,从而提高 embedding 的效果当 database content 可用时,type 标注时还会进一步对 column content 做检索,并为其标注 column name,这样当用户的 question 的所提到的列名或者条目不精确时,也可以通过这个步骤来对应到具体的数据库 column,从而提高效果,实现所谓的“内容敏感性。
PostgreSQL常用插件
PGCCC的博客
05-29 436
1.提供 PostgreSQL 实例的操作系统级别的资源使用情况,包括缓存命率和磁盘 IO 等。通过使用这些插件,您可以大大增强 PostgreSQL 的功能,满足各种复杂的应用需求。1.提供三元组(trigram)相似度匹配和索引功能,常用于模糊搜索和文本相似度匹配。1.增加对地理空间数据的支持,使 PostgreSQL 成为一个功能强大的空间数据库。1.PostgreSQL 的过程语言,允许用户编写存储过程和触发器。1.基于逻辑复制的插件,提供更细粒度的数据复制控制和双向复制能力。
SQL Server定期收缩日志文件详细步骤——基于SQL Server 2012
最新发布
lxcw_sir的博客
05-29 290
SQL Server定期收缩日志文件详细步骤——基于SQL Server 2012
postgressql——Tuple学习(2)
Re_view的博客
05-27 252
postgressql——Tuple学习(2)
Hsql每日一题 | day01
很开心你能来~
05-23 516
hsql 习题--找出连续活跃3天及以上的用户
mysql索引使用
08-31
因此,在设计表结构时,应尽量避免在like语句使用通配符开头的模式,以提高查询效率。 此外,需要注意的是,MySQL的组合索引采用了"最左前缀匹配"的原则。这意味着只有当查询条件从左到右与组合索引的列进行匹配...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • C语言中的数据类型及输出格式 11519
  • C语言中随机数的生成(rand函数和srand函数) 9368
  • C语言编写字符串拷贝(strcpy)函数详解以及assert函数 9193
  • 电脑系统32位和64位有哪些区别?32位和64位是什么意思 ? 8493
  • 猿创征文|pycharm中的翻译插件translation以及将其更换为百度翻译获取ID和密钥的详细步骤 5409

最新评论

  • python实现动态柱状图

    残浪980: 请问我想给前15个国家设置不同的颜色改怎么弄呢

  • python中的类型注解

    Boning Lin: itheima 怕不是大师兄喔表情包

  • 原码、反码、补码

    做而论道_CS: 由补码换算到十进制数,也极其简单。 你只需记住:【补码首位的权,是负数】。 一般的八位二进制数,各个位的权是:   128、64、32、16、8、4、2、1; 如果是八位的补码,各个位的权则是:  -128、64、32、16、8、4、2、1。   例如,补码是:1110 0001, 它代表的十进制是:-128 + 64 + 32 + 1 = -31。 又如,补码是:0110 0001, 它代表的十进制是:0 + 64 + 32 + 1 = +97。 你看吧,仅仅使用【进制转换】,就完事了! 哪里还需要用到原码反码? ------------ 实际上,二进制数,它就是数! 什么原码反码补码,都是不存在的事! 不存在,为什么还要讲、还要学、还要考研? 因为,计算机老师讲这些,可以赢得丰厚的利益! 所以,这些老师,才会如此毁人不倦坑人不浅!

  • 原码、反码、补码

    做而论道_CS: 在两位十进制数运算中,舍弃进位,就是减去了一百。 所以,加 99,再减 100,当然就是 “-1” 了。 八位二进制数是:0000 0000 ~ 1111 1111。 也就是十进制数:0 ~ 255。 如果有进位,就是:256。 此时,加上 255 (1111 1111),再舍弃进位 256, 这不也就是-1 吗? 所以:+255 (1111 1111),就是-1; 同理:+254 (1111 1110),就是-2;    +253 (1111 1101),就是-3;    。。。    +128 (1000 0000),就是-128。 这些正数,就是计算机专家 “发明” 的补码。 另外,加上 127 (0111 1111),是不会出现进位的。 那么,也就不用舍弃进位,也就不用减 256 了。 所以,加上 127,就不会出现 “减法的作用”。 因此,0 ~ 127,这些就是 “正数”。 而 128 ~ 255,就是负数:-128 ~ -1。 于是,0~ 255,就代表了:-128 ~ +127。 ------------------ 老外的算术能力很差,不懂什么是进位,  更弄不懂什么是舍弃进位。 所以,就编造了一套谎言:  机器数真值符号位原码反码补码正数三码相同  负数取反加一符号位不变符号位也参加运算模 我们的老师,数学底子也很差啊!  小学的算术,都看不透,就被老外忽悠瘸了!  天天喋喋不休的:原码反码取反加一。。。  也不知道有多少学生因此而挂科。

  • 原码、反码、补码

    做而论道_CS: 哪有什么原码反码补码呀! 虽然,计算机使用的,是二进制数。 但是,二进制数,也是数,和十进制数,是雷同的。 二进制数,并不是什么原码反码补码。 符号位,也是根本就不存在的。 所谓的“补码”,不过是一道小学算术题而已。 所谓的“补码”,与什么进制,都没有关系。 所谓的“补码”,也不是计算机专家发明的。 另外,在码长八位时,各码的范围如下。 原码:-127 ~ +127; 反码:-127 ~ +127; 补码:-128 ~ +127。 看到了吧? -128 只有补码,没有原码和反码。 没有原码,你拿什么取反? 没有反码,你拿什么加一? 取反加一,不可用! -128 的补码,你是怎么得来的呢? 实际上,取反加一,根本就没有任何理论依据。 只是计算机专家用来唬弄老外的! 你还想跟着老外学算术? 你直接就掉坑里了! ------------------ 你看看十进制数吧,两位的:0~99。 最大值 99,就能当做“负一”来用。 如:27 + 99 = (一百) 26   27 - 1 = 26 只要你忽略进位,仍旧保持两位数,它们就是相等的。 由此可知,舍弃了进位:  正数,就能当做负数来用。  加法,也就能实现减法运算。 在计算机中,舍弃进位,会怎样:  可以省略减法器,简化硬件!  只需配置一个加法器,便可走遍天下。 如果你明白什么是 “舍弃进位”:  你就会懂得 “补码的来源与意义”。 老外,是不懂这些的。  所以,才编造了:符号位原码。。。

大家在看

  • MySQL学习
  • 【搜长问题】 203
  • 如何修复USB驱动器在Windows 10或11上不显示的问题?这里有办法 252
  • 源码编译安装LNMP 101
  • 查看docker中各个容器所占的资源

最新文章

  • show profile和trance分析SQL
  • MySQL的优化
  • MySQL的日志详解
2023年37篇
2022年76篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳862

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司三明企业网站制作价格柳州seo推荐芜湖优化哪家好白山网站搭建多少钱晋中SEO按天扣费公司自贡网站建设设计哪家好中卫阿里店铺托管公司韶关百度seo多少钱宿迁网站推广方案报价宿州关键词排名包年推广推荐淄博外贸网站建设报价普洱网页设计泸州SEO按天计费哪家好布吉网站推广工具价格曲靖SEO按效果付费塔城网络营销襄阳企业网站制作报价昭通百度爱采购报价枣庄企业网站改版哪家好伊春网站优化按天扣费推荐同乐SEO按效果付费价格雅安网络推广报价赤峰seo网站推广哪家好潮州关键词按天计费报价潜江网站制作设计价格衡水百度竞价包年推广报价镇江营销网站推荐安阳外贸网站设计抚顺网站优化按天收费公司常德网页制作多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化