| |
|
开发:
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优化 |
现有alarm(历史故障?某时刻某设备发生故障时 记录一条) fan(所有设备 点位历史数据表每秒记录一条)两张表 需求:某一段时间内 故障发生时 某点位的数据 通过需求了解查询是要将两张表联合查询 当写出sql后才发现事情并没有那么简单 fan表中数据量过大 查询时间跨度越大 连表查询的条数越大 一条86400条 一个月数据量就是86400*30*设备台数*一个月故障条数 我选择的解决方法是做伪表 连表前后带上查询条件 数据库:clickhouse 10天alarm表数据:2000条 10天fan表数据:86w条 未优化sql:
耗时:800ms左右 这条sql是先联合两张全部数据量 再根据时间查询 导致两张表全部数据量结合 fan表数据量很大 应该先限制fan表时间后 再连表查 如果查询的mysql数据库 待查好几十秒了 优化第一次:
耗时:700ms左右 优化一次后 fan表中全表数据已经限制到了需要查询的时间 按照这个逻辑 我们把alarm表也限制在查询时间内 最终sql:
耗时:300ms左右 最后优化的sql是先查询出alarm,fan表这个时间段的数据 再进行连表查 相比两种全表关联 大大减少了查询条数和等待时间 了解查询优化后 现在还有个需求 展示最近时间一百条故障时的点位数据 未优化sql:
没有了时间限制 怎么优化呢 因为只展示一百条故障数据 1 先用limit查询出100条故障 2 获取到这100条故障中最大时间和最小时间 拼接成条件限制fan表 优化后sql:
总结: 当遇到连表查询时 先将条件拼接在连表查询前 避免全表关联 最后 连表优化sql我就讲完啦?大家根据需求调整代码 有遇到什么问题可以留言告诉我哦 欢迎评论区讨论🥰 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 10:16:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |