记一次sql优化过程
2016-11-23 22:45
232 查看
在一个列表中,用到分页,就用到统计数据,列表不允许重复数据出现,就得用到group by,开始的sql大概是这样的:
很明显,在子查询的时候,生成了一个临时表,当数据量多的情况,慢查就不可避免了。所以,优化在所难免~
其实这是最简单的情况,在列表中还存在搜索条件,有针对对table1的,有针对table2。存在left join 就要尽量降低笛卡尔积,优化之后并带有查询条件的情况,有如下语句:
怎么感觉,除了降低呢笛卡尔积之外就没啥优化空间了呢?
细想一下,其实还是可以继续降低笛卡尔积的,在left join之后,若用where进行连接查询,那么,是先进行笛卡尔积计算,再进行where查找,那么,就可以在left join
之后用and连接查询语句,这样,在left join 之前,会先对table2进行where查找,查找得到的临时表再通table1得到的临时表进行笛卡尔积计算。优化sql如下:
语句大概的优化样子只能这样了,我也暂时想不出更好的sql。
然后运行,测试,发现得到了一些搜索之外的结果集,比如对table2进行where,细想一下,join方式应该是inner join ,只有满足左右表都不为空的情况才是想要的结果集。
最后,改成inner join ,测试无误
总结:where 是left 之后 再过滤 and 是只过滤参与笛卡尔积的后面的表的过滤 不过滤最终查询结果
在此,感谢酱油哥的帮助
暂时就写到这~~
很明显,在子查询的时候,生成了一个临时表,当数据量多的情况,慢查就不可避免了。所以,优化在所难免~
其实这是最简单的情况,在列表中还存在搜索条件,有针对对table1的,有针对table2。存在left join 就要尽量降低笛卡尔积,优化之后并带有查询条件的情况,有如下语句:
怎么感觉,除了降低呢笛卡尔积之外就没啥优化空间了呢?
细想一下,其实还是可以继续降低笛卡尔积的,在left join之后,若用where进行连接查询,那么,是先进行笛卡尔积计算,再进行where查找,那么,就可以在left join
之后用and连接查询语句,这样,在left join 之前,会先对table2进行where查找,查找得到的临时表再通table1得到的临时表进行笛卡尔积计算。优化sql如下:
语句大概的优化样子只能这样了,我也暂时想不出更好的sql。
然后运行,测试,发现得到了一些搜索之外的结果集,比如对table2进行where,细想一下,join方式应该是inner join ,只有满足左右表都不为空的情况才是想要的结果集。
最后,改成inner join ,测试无误
总结:where 是left 之后 再过滤 and 是只过滤参与笛卡尔积的后面的表的过滤 不过滤最终查询结果
在此,感谢酱油哥的帮助
暂时就写到这~~
相关文章推荐
- 关联查询SQL的一次优化过程
- 记一次Sql优化过程
- 记录一次sql优化过程
- 一次SQL优化分析的全过程
- 关于关联查询sql的一次优化过程及其他 推荐
- 记QQ群里一次sql优化
- 一次Java调用OS命令的优化过程实录
- 一次使用临时表优化数据处理的过程
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 一次ORA-01555问题分析,及SQL优化。
- 一次非典型SQL优化:如何通过业务逻辑优化另辟蹊径?
- SQL存储过程事务和优化方法(包括查询方式语句结合)
- 记录一次SqlServer查询优化的过程(聚合索引的使用)
- 处理一次物流系统mysql大并发全表扫描SQL增加索引的过程
- 【夯实Mysql基础】记一次mysql语句的优化过程
- 一次帮助网友优化的SQL案例
- 一次sql查询优化 并行度
- SQL 存储过程优化总结
- 一次非常有意思的SQL优化经历
- 2017-12-27记一次快速SQL优化