怎么看我装的sql能不能用_深入浅出sql优化(三)之单表索引优化

大家好,我是闲水,每天更新java最新最热技术,对java感兴趣的朋友记得关注一下哦。

注意 :这是SQL性能优化第三章,点击关注查看前置内容。

上篇文章我们主要了解了索引优化的标尺"Explain"怎么用,这一张,我们就要将索引怎么建立,以及索引失效的例子了。废话不多说我们开始。

一 单表查询建立索引

系统中经常出现的sql语句如下: ( SQL_NO_CACHE 是不查找缓存,以免对我们的结果造成影响)

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 and deptid=4 AND emp.name = 'abcd'

995a0ebd1008179f02a709a91db7e74f.png

未建索引,0.15s

我们先运行一下单表查询都用了0.15s,这个效率已经很低了(这里我们模拟了一百万条数据)

索引应该如何建立 ?

单表查询建立索引的规则是where条件后,最好都建立索引

创建索引:CREATE INDEX idx_age_deptid_name ON emp(age,deptid,NAME)

让我们看一下索引的效果

6e99153b4d77aa9dbcbcea51aa4019c6.png

建立索引后小数后两位已经无法统计

大家可以看到,索引的效果还是不错的。

第二个规则 最佳左前缀法则

如果系统经常出现的sql如下:

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.age=30 AND emp.name = 'abcd'

或者

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.deptid=1 AND emp.name = 'abcd'

那原来的idx_age_deptid_name 还能否正常使用?

aca49e200893046b60ff1a6c045529ab.png

用到了一半

29ae21b734139e2781b4834a3b97b3ea.png

没用到

可以看到,第一个只有部分被使用到了,图二没有用到索引

这是为什么呢,这就要说到我们的最佳左前缀法则,如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。

三 不能在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

这两条sql哪种写法更好

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE emp.name LIKE 'abc%'

EXPLAIN SELECT SQL_NO_CACHE * FROM emp WHERE LEFT(emp.name,3) = 'abc'

878e6579203212719b9c33d501fa511a.png

第一个

57749b9278bd2dc7b62e6e85b8dd0865.png

第二个

切记不要用计算、函数、(自动or手动)类型转换。

四.mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描

五.is not null 也无法使用索引,但是is null是可以使用索引的

六.like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作

七.字符串不加单引号索引失效

八.存储引擎不能使用索引中范围条件右边的列

大家切记在建索引的时候不要违反这些规定

下面是我自己总结的一些建议送给大家:

1.对于单键索引,尽量选择针对当前query过滤性更好的索引

2.在选择组合索引的时候,当前Query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。

3.在选择组合索引的时候,尽量选择可以能够包含当前query中的where字句中更多字段的索引

4.在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面

5.书写sql语句时,尽量避免造成索引失效的情况。

最后给大家一个练习题,看一下自己能答对几道题

Where语句 索引是否被使用

where a = 3 Y,使用到a

where a = 3 and b = 5 Y,使用到a,b

where a = 3 and b = 5 and c = 4 Y,使用到a,b,c

where b = 3 或者 where b = 3 and c = 4 或者 where c = 4N

where a = 3 and c = 5 使用到a, 但是c不可以,b中间断了

where a = 3 and b > 4 and c = 5 使用到a和b, c不能用在范围之后,b断了

where a is null and b is not null is null 支持索引 但是is not null 不支持,所以 a 可以使用索引,但是 b不可以使用

where a <> 3 不能使用索引

where abs(a) =3 不能使用 索引

where a = 3 and b like 'kk%' and c = 4Y, 使用到a,b,c

where a = 3 and b like '%kk' and c = 4Y, 只用到a

where a = 3 and b like '%kk%' and c = 4Y, 只用到a

where a = 3 and b like 'k%kk%' and c = 4Y,使用到a,b,c

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java类加载顺序(spring容器下)

执行顺序&#xff1a;父类静态块–>子类静态块–>父类非静态块–>父类构造方法–>子类非静态块–>子类构造方法–>自动装载的方法 子类和父类均加上Service注解&#xff0c;将其交给spring容器管理。 父类&#xff1a; Service public class Father {publ…

python 绘图 hist bin参数_Python-hist,distplot bin宽度不一致问题的解决方案

python的hist有一个bug&#xff0c;之前一直没有解决。绘制直方图的时候&#xff0c;往往出现两组数据由于分布不一样&#xff0c;&#xff0c;导致出来的图片中&#xff0c;虽然是一样数目的bins&#xff0c;但是bin的宽窄不同。而我想得到的是&#xff0c;&#xff0c;虽然数…

Nginx反向代理的使用

1. 常用服务器比较 apache: 功能完善&#xff0c;历史悠久&#xff0c;模块支持非常丰富&#xff0c;属于重量级产品&#xff0c;比较耗费内存。缺点:处理每一个php比较费资源&#xff0c;导致如果高并发时会耗费服务器资源无法处理更多请求。 lighttpd: 内存开销低&#xff0…

python继承语法_python中继承父类的例子(python3的语法)

#codingutf8class Cup:#构造函数&#xff0c;初始化属性值def __init__(self,capacity,color):self.capacitycapacityself.colorcolordef retain_water(self):print("杯子颜色&#xff1a;"self.color"&#xff0c;杯子容量&#xff1a;"self.capacity&quo…

Rabbit发送消息,消费者消费异常

Rabbit发送消息&#xff0c;消费者消费异常 背景&#xff1a; 在步骤1下创建订单&#xff0c;步骤2下提交消息 Transactionalpublic void tradeHandler(Map map) { // 1.生成统一订单 var unifyOrder orderService.create(orderService.getUnifyOrderDTO(fee, alipayOrder));…

jwt token 太长_理解 JWT 鉴权的应用场景及使用建议

JWT 介绍JSON Web Token(JWT)是一个开放式标准(RFC 7519)&#xff0c;它定义了一种紧凑(Compact)且自包含(Self-contained)的方式&#xff0c;用于在各方之间以JSON对象安全传输信息。这些信息可以通过数字签名进行验证和信任。可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥…

如何使用explain进行SQL语句调优

参考&#xff1a;https://mp.weixin.qq.com/s/kYcrHtE82-sOqNOp_qM4Ig

microsoft vbscript编译器错误怎么解决_win7系统ie应用程序错误怎么办 ie应用程序错误解决方法【详解】...

windows系统自带的ie浏览器很少用户会去使用到&#xff0c;它运行起来比其他的浏览器要慢很多&#xff0c;而且经常会出现各种各样的问题&#xff0c;最近有位win7系统用户&#xff0c;在使用ie浏览器的时候&#xff0c;发生了应用程序错误的情况&#xff0c;那么win7系统ie应用…

简述python爬虫_python爬虫入门篇了解

1. 爬虫分类&#xff1a;1.1 通用爬虫&#xff1a;例如搜索引擎&#xff1a;无差别的收集数据&#xff1b;提取存储关键字&#xff1b;构建索引库&#xff1b;给用户提供搜索接口。1.2 聚焦爬虫&#xff1a;有针对性的编写特定领域数据的爬取程序。2. Robots协议&#xff1a;指…

修改固态硬盘的物理序列号_买固态怕踩坑?收下这些软件,轻松鉴别好坏

再有半个月&#xff0c;就迎接年中的促销旺季。不少朋友都希望趁着各种优惠、跳楼价&#xff0c;组一台梦想机、升级一下自己的电脑。说到体验升级&#xff0c;相信就算是DIY新手和硬件小白都知道&#xff0c;要想电脑快&#xff0c;必须选固态。但是固态参数多&#xff0c;又是…

python乘法表代码注释_Python统计python文件中代码,注释及空白对应的行数示例【测试可用】...

本文实例讲述了Python实现统计python文件中代码,注释及空白对应的行数。分享给大家供大家参考&#xff0c;具体如下&#xff1a;其实代码和空白行很好统计&#xff0c;难点是注释行python中的注释分为以#开头的单行注释或者以开头以结尾 或以"""开头以"&qu…

32位python和64位python区别_python32位和64位有什么区别

python32位和64位有什么区别&#xff1f;64位能够用更大的内存空间&#xff0c;64位可以在64位的系统下运行&#xff0c;但是不能在32位系统下运行。32位能够在32位和64位上运行&#xff0c;考虑到兼容性&#xff0c;建议使用32位的python。如何查看python是32位还是64位可使用…

《常用控制电路》学习笔记——数控锁相环调速电路

序言 今天开始我将把自己学习《常用控制电路》的一些内容发到互联网上&#xff0c;希望能和大家交流学习。 这本书主要介绍了一系列控制电路的经典案例&#xff0c;进行了电路和代码的设计&#xff0c;我将把这本书中学习到的内容和学习的过程尽量准确的分享出来与大家交流&…

《常用控制电路》学习笔记——数字控制直流电动机调速电路

书中该节讲述的电路通过ADC芯片将电位器的阻值转换为电压量&#xff0c;然后使用单片机输出PWM进行电路控制。本电路也可扩展应用至需要模拟量输入与输出的场合。 目录 一、系统设计思路 二、各模块电路分析 2.1电路构成 2.2工作状态分析 三、程序分析 3.1 变量定义 3.…

《常用控制电路》学习笔记——数控直流恒流源电路

书中该项目内容设计了一个从交流220V市电作为供电电源的恒流源电路&#xff0c;并且此电路可由加减计数器74LS193控制输出的电流大小。 目录 一、系统方案 二、各模块电路分析 整流滤波及稳压电路 数字量控制电路 数模转换电路 数控恒流源产生电路 三、电路仿真结果 四…

图像太宽无法输出请裁剪图像或降低分辨率然后重试_真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA...

作者 | 蒋宝尚编辑 | 丛 末图像翻译目的是用模型将源域图像转换到目标域图像&#xff0c;通常涉及标签图到场景图的转换、图像风格、人脸的属性变换、标签图到场景图的转换。图像翻译任务自生成对抗网络提出就得到了快速发展&#xff0c;例如经典的pix2pix、CycleGAN、StarGAN。…

python图像文件压缩_python实现图片压缩代码实例

前言项目中大量用到图片加载&#xff0c;由于图片太大&#xff0c;加载速度很慢&#xff0c;因此需要对文件进行统一压缩一&#xff1a;导入包from PIL import Imageimport os二&#xff1a;获取图片文件的大小def get_size(file):# 获取文件大小:KBsize os.path.getsize(file…

php serialize和json_encode哪个更快_世界 10 大编程语言,Java 不是第一,PHP 才第五...

来源&#xff1a;toutiao.com/a6764554659349676557/如果你是软件开发领域的新手&#xff0c;那么你会想到的第一个问题是“如何开始&#xff1f;”编程语言有数百种可供选择&#xff0c;但是你怎么发现哪个最适合你&#xff0c;你的兴趣和职业目标又在哪里呢&#xff1f;选择最…

python列表操作程序_Python入门篇(三)之列表

1、列表定义names ["ZhangYang","Guyun","Xiangpeng","Xuliangchen"] #列表存储&#xff0c;类似数组2、列表的操作(1)切片names ["ZhangYang","Guyun","Xiangpeng","Xuliangchen"] #列表存…

python编程制作_一种Python编程创作平台的制作方法

本发明涉及在线浏览器技术领域&#xff0c;特别涉及一种Python编程创作平台。背景技术&#xff1a;目前项目整体使用javascripthtmlcss实现&#xff0c;用户界面编写上使用react框架。具体实现上是将python语法转换为js语法&#xff0c;使其可以在浏览器中运行&#xff0c;目前…