| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 近期工作中关于优化SQL的总结 -> 正文阅读 |
|
[大数据]近期工作中关于优化SQL的总结 |
索引失效建了索引用Explain分析SQL发现没用上,难道是索引失效?索引失效的大部分情况都没有出现。之后才发现两张表的编码格式不一样也会导致索引失效。还有就是字段编码格式不一致也会失效。 用上索引的思路有一个统计单张表的某个维度的接口,该表的crt_date为yyyymmdd格式,该张表有索引(crt_date),正常来说我们都是只是count就行,那么如何优化呢?我们可以在业务层先查找出来该张表最早的创建时间放入redis缓存,之后用上索引crt_date即可。 order by 分页出现的问题由于一些批量导入的数据创建时间都是一致的,order by 创建时间,大量一致的时间会出现分页不一致的问题。解决思路:将具有唯一性的字段排序引入需要排序的业务字段 参考:my.oschina.net/u/3677838/b… ? ? ? ? ? ?www.cnblogs.com/zhengxl5566… in 和 existsin先执行子查询,子查询查询出数据以后,将前面的查询分为n次普通查询。 适用于外表大而内表小的情况。 exists先查询外层循环orders,然后会判断是不是存在 order_id 和 users 表中的id相等,相等才保留数据。适用于外表小,内表大的情况。 联合索引(a,b,c)其实就相当于创建了 a ab abc索引,要遵守最左匹配原则 权限兼容不用再业务层写 if(admin) 返回对象,if(运营商) 返回对象,用上 choose when otherwise,在业务层直接判断当前用户是否是admin,如果是admin就不传userid,在mapper里判断,如果有userID 就连权限表等操作。 不要在业务层传in尽量在mapper里 SQL in,否则查看日志全是 in 分析SQL步骤利用Explain当 Extra 出现using filesort Using join buffer就是要优化的,还有就是查看key是否用用到索引 Explain复习
Explain作用Explain + SQL一起使用时,MySQL会显示来自优化器关于SQL执行的信息。比如可能用到哪些索引,哪些索引又被实际使用。 Explain执行计划包含字段信息如下:分别是 一、id
二、select_type
1、SIMPLE
2、PRIMARY
3、SUBQUERY
4、DERIVED
5、UNION
三、type
1、system
2、const
3、eq_ref
4、ref
5、range
6、index
7、ALL
四、possible_keys?
五、keykey 六、Extra
1、Using index
什么又是覆盖索引? 一条 2、Using where
3、Using temporary
4、Using filesort?
5、Using join buffer?
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 5:22:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |