主页
看看
说说
主页
说说
看看
登入
注册
首页
提问
分享
建议
讨论
公告
动态
其它
发表新帖
MySQL 在数据区分度不高的字段上加了索引,并且总条数量大的表,有 where 条件时的 count(*)出现了走索引比不加索引时快的情况
讨论
未结
10
42
rqxiao
会员
2022年8月31日 09:39
发表
打开或者下载
APP,畅享极致体验
收藏(
0
)
分享
相关标签:
灌水交流
注意:本文归作者所有,未经作者允许,不得转载
10个回复
zmal
会员
2022年8月31日 09:39
这么多点击没人回答,估计是懒得回答吧,有点基础··· 搜索下什么是“回表”。有 idx (`data_type`, `is_deleted` )时,where is_deleted = 0 AND data_type != 1 的 count(*)不需要回表,只通过索引就能完成统计。 区分度低的索引查询慢说的是有回表的情况。
0
0
评论
sujin190
会员
2022年8月31日 09:39
其实就是虽然都需要全表扫,但是你这个不需要查询除索引外的字段,所以直接在索引上统计就行,且不说索引数据量小了很多,而且大概率索引会在内存中,所以快一点很正常,你 SELECT 加个不在索引中的字段触发回表,你就会发现效率差不多了 区分度不高的列上加索引查询效率不明显,这个主要问题是这个字段添加过滤条件后,需要扫描的数据条数几乎和不加索引差距不大,所以并不能明显提高效率,更不要说你这个地方都没有添加任何过滤条件,无论怎么着都要扫描所有数据
0
0
评论
rqxiao
会员
(楼主)
2022年8月31日 10:09
不好意思 ,意思是 只要是走索引的 count(*) 就是比 全表扫描的 count(*) 快是吗。虽然两者有可能都是要找 5000w 条
0
0
评论
rqxiao
会员
(楼主)
2022年8月31日 10:09
不好意思。意思是 count(*) 如果是 只走索引不回表 或者 全表扫描 ,虽然都有可能是 5000w 的记录数,但因为索引 b 树结构的特点(非叶子节点只存索引数据),和全表扫描比,走索引不回表这种情况明显的快是么。
0
0
评论
ComTNT
会员
2022年8月31日 10:09
推荐你本书,sql 优化核心原理,微信读书上有,第一章就能把你这个问题讲清楚,虽然这本书是基于 oralce 讲的,但是核心思想适用于大部分 db
0
0
评论
ComTNT
会员
2022年8月31日 10:09
打错了,是 sql 优化核心思想
0
0
评论
sujin190
会员
2022年8月31日 10:09
#4 是的,索引应该是只保存索引字段和主键的值,磁盘 IO 会少很多,而且一般来说索引应该会尽可能保存在内存中,这也可以快一点吧
0
0
评论
LuckyLight
会员
2022年8月31日 14:09
不得不说,很多文章都是误人子弟,不看实际场景就给结论都是耍流氓。“区分度不高的列上加索引 ,查询效率不明显” 也得看具体业务是什么。
0
0
评论
GopherDaily
会员
2022年8月31日 16:09
如果查询需要在字段都在 index 里面,可以避免回源。 用 Explain ,看到不理解的 google ,这是正道
0
0
评论
reter
会员
2022年8月31日 16:09
就我所看过数据库的文档,就算有了索引,数据库还会采集数据的元数据做辅助判断是否使用索引。用 explain 查看数据库实际的执行计划才是正解
0
0
评论
回复
所在专栏
提问
分享
建议
讨论
动态
其它
阅读权限
默认,所有用户可见
LV1及以上用户可见
LV2及以上用户可见
LV3及以上用户可见
LV4及以上用户可见
LV5及以上用户可见
LV6及以上用户可见
会员专享
管理员可见
确认修改
相关帖子
香港行的一些见闻,去过没去过的都来了解下
6
Rime 输入法真是简洁啊。
4
win11 间歇性卡顿, 每十几秒卡顿半秒, 声音鬼畜, 画面不动
0
5 家公司工作了 18 年,分享些工作经验,也写给自己
0
如何看待满嘴脏话的人?
1
有偿求租 chatgpt 账号,自用应付工作不分享
0
孩子小学一年级学习跟不上,每天晚上作业写到快 12 点,今天老师给我打电话建议明年重读一年级
0
2023 年了, GoWeb 应该选择 Goframe、Gin、Beego、Iris 哪一项?
20
看隔壁邻居噪音有感,自己也遇到了楼上噪音问题,那么带降噪耳机可以解决吗?
8
使用 usb 上行线接入显示器后插入 U 盘,文件管理器没有反应
0
友情链接
聚合社区