兄弟们,关于 sql 优化的问题想请教一下

2022-11-24 02:51:38 +08:00
 dafuyang

最近学习了一下 sql 语句的优化入门,这里有个场景存在疑惑:
比如一个简单的查询,比如
select a,b,c,d from table order by d desc limit 0,100;
在 d 字段上创建普通索引,另外由于 b 字段可能会保存很大的数据,所以我认为创建联合索引(a,b,c,d)进行索引覆盖查询可能不好?
问题如下:
1.这个查询属于 filesort ,效率不高,在表数据量不大的时候不会暴露问题,但是在数据量大的时候,时间就长了,这个场景下改如何优化呢?
2.我目前只知道强制使用 d 索引,或者创建我上面说的联合索引进行索引覆盖外,还有没有别的方法呢,另外,当一个字段保存的数据较多时,有必要创建联合索引吗,好像重复了上面的疑问。。求解。。

2983 次点击
所在节点    MySQL
23 条回复
dafuyang
2022-11-25 16:25:13 +08:00
@xiangyuecn 大哥,刚刚用你说的语句试了一下,发现第二步的查询没有排序啊。。
dafuyang
2022-11-25 16:28:27 +08:00
@8355 d 是一个自定义排序字段 int ,刚刚试了一下 8 楼老哥的方法发现第二步查询没有排序。。
860670496
2022-12-29 09:38:52 +08:00
@dafuyang 肯定不排序啊,子查询的排序跟你主查询的排序一毛钱关系都没有,8 楼老哥只是帮你解决索引的问题,排序是另外一个问题,#17 已经给你写出来了,order by 要写在主查询里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/897481

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX