IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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太狠了,一个星期一个版本),刚好项目测试环节结束,项目也部署到预发布环境,本想万事大吉,咱们愉快又轻松的学习下吧!

噩耗来了,同事反应有个接口的响应速度尽然达到了恐怖的十几秒,同事迅速定位了下问题,发现是小崔对外提供的接口响应太慢了。哇哦,小崔顿时慌了,连忙查看这个接口,发现这个接口下面只执行了下面这段代码
在这里插入图片描述小崔心想,测试环境好好的,怎么到了预发布环境接口响应速度怎么就差了这么多呢。所以小崔迅速去对比了下这张表的数据量,不看不知道,一看吓一跳。预发布环境的数据量尽达到了390多万条数据,这可是测试环境的好几十倍呢。

这下子相信有些大佬已经猜出问题所在了。下面就是这张表的索引结构
在这里插入图片描述
程序执行的SQL如下:
SELECT * from www_member WHERE mobileNumber = 'xxxxx' AND channelId in('xxx','xxx','xxx')

没错,就是这条SQL在执行的时候没有走索引,进行了全表扫描,因此,这条SQL整整执行了十几秒。

所以这肯定是一条慢SQL,这时小崔想起了老大教的解析慢SQL的步骤:
1、使用explain关键字去查看这条SQL的执行计划

EXPLAIN SELECT * from www_member WHERE mobileNumber = 'xxx' AND channelId in('xxx','xxxx','xxx')

执行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/77d3e6402e054de59de62942866fb0c2.png在这里插入图片描述相信大家也看懂了,这条SQL可能执行的索引位:channel_id_index,但是实际上在‘key’下面没有走索引。

至于为什么没走索引,是因为SQL执行的时候遵循最左原则,当‘mobileNumber’这个字段没有添加索引的时候,尽管后面的‘channelId’字段添加了索引,这条SQL也不会走索引。

哦~,原来如此,这时候其实有两种解决方案

第一种方案是:将in语句挪到前面,我们使用explain看看
在这里插入图片描述这时候你会发现,针对这条SQL还是没有走索引。为什么呢?是不是很纳闷。

其实,索引最好建立在区分度比较高的列上。在这里,由于channelId这列的区分度不高,并且小崔执行的这条SQL匹配的数据超过了总表的30%以上。

因此,这里的in还是没能走索引。

所以只剩下最后一种方案了,由于每个人的手机号都不同,是最适合建立索引的。

小崔迅速在mobileNumber字段上建立的索引,再使用explain关键字查看下,发现果然快多了
在这里插入图片描述快看这个索引级别可以很难达到的喔,哈哈哈

ps:其实mobileNumber字段原来是加了唯一索引,由于业务需求,就将唯一索引删除了。这就
告诉我们写代码的时候千万不要大意,不然后患无穷喔。

幸亏预发布就发现了这个问题,不然小崔估计要走人了。

哈哈,好险好险

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:15:08  更:2021-11-18 11:16:59 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码