| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 小崔很努力之数据库索引优化 -> 正文阅读 |
|
[大数据]小崔很努力之数据库索引优化 |
最近小崔在忙着赶需求的路上(ps:boss太狠了,一个星期一个版本),刚好项目测试环节结束,项目也部署到预发布环境,本想万事大吉,咱们愉快又轻松的学习下吧! 噩耗来了,同事反应有个接口的响应速度尽然达到了恐怖的十几秒,同事迅速定位了下问题,发现是小崔对外提供的接口响应太慢了。哇哦,小崔顿时慌了,连忙查看这个接口,发现这个接口下面只执行了下面这段代码 这下子相信有些大佬已经猜出问题所在了。下面就是这张表的索引结构 没错,就是这条SQL在执行的时候没有走索引,进行了全表扫描,因此,这条SQL整整执行了十几秒。 所以这肯定是一条慢SQL,这时小崔想起了老大教的解析慢SQL的步骤:
执行结果如下: 至于为什么没走索引,是因为SQL执行的时候遵循最左原则,当‘mobileNumber’这个字段没有添加索引的时候,尽管后面的‘channelId’字段添加了索引,这条SQL也不会走索引。 哦~,原来如此,这时候其实有两种解决方案 第一种方案是:将in语句挪到前面,我们使用explain看看 其实,索引最好建立在区分度比较高的列上。在这里,由于channelId这列的区分度不高,并且小崔执行的这条SQL匹配的数据超过了总表的30%以上。 因此,这里的in还是没能走索引。 所以只剩下最后一种方案了,由于每个人的手机号都不同,是最适合建立索引的。 小崔迅速在mobileNumber字段上建立的索引,再使用explain关键字查看下,发现果然快多了 ps:其实mobileNumber字段原来是加了唯一索引,由于业务需求,就将唯一索引删除了。这就 幸亏预发布就发现了这个问题,不然小崔估计要走人了。 哈哈,好险好险 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:36:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |