频繁使用中间表会带来两个问题,一是展开数据需要耗费内存资源,二是原始表中的索引不容易使用到(特别是聚合时) 。因此,尽量减少中间表的使用也是提升性能的一个重要方法 。
3.1 使用HAVING子句对聚合结果指定筛选条件时,使用HAVING子句是基本原则 。不习惯使用HAVING子句的人可能会倾向于像下面这样先生成一张中间表,然后在WHERE子句中指定筛选条件 。例如下面:
SELECT *FROM (SELECT sale_date, MAX(quantity) max_qtyFROM SalesHistoryGROUP BY sale_date) tmp WHERE max_qty >= 10然而,对聚合结果指定筛选条件时不需要专门生成中间表,像下面这样使用HAVING子句就可以 。
SELECT sale_date, MAX(quantity)FROM SalesHistory GROUP BY sale_dateHAVING MAX(quantity) >= 10;HAVING子句和聚合操作是同时执行的,所以比起生成中间表后再执行的WHERE子句,效率会更高一些,而且代码看起来也更简洁 。
3.2 对多个字段使用IN当我们需要对多个字段使用IN条件查询时,可以通过 || 操作将字段连接在一起变成一个字符串处理 。
SELECT *FROM Addresses1 A1 WHERE id || state || cityIN (SELECT id || state|| cityFROM Addresses2 A2);这样一来,子查询不用考虑关联性,而且只执行一次就可以 。
3.3 先进行连接再进行聚合连接和聚合同时使用时,先进行连接操作可以避免产生中间表 。原因是,从集合运算的角度来看,连接做的是“乘法运算” 。连接表双方是一对一、一对多的关系时,连接运算后数据的行数不会增加 。而且,因为在很多设计中多对多的关系都可以分解成两个一对多的关系,因此这个技巧在大部分情况下都可以使用 。
到此本文讲解完毕,感谢大家阅读,感兴趣的朋友可以点赞加关注,你的支持将是我更新动力 。
推荐阅读
- 侧睡、喜皱眉、不卸妆……这些小习惯让你慢慢变丑
- |要怎样才能让自己变得更强大?
- 殷桃|比起殷桃的腰,她的这个地方更让广大网友羡慕!
- 大学生|“啃老”换了新模式,让父母心甘情愿被啃,甚至还觉得未来可期
- 专升本|央企招聘有新标准,二本生和专升本都不要,内部人的解释让人沉默
- |女星们的生图,让我意识到容貌焦虑的不必要
- 护肤|想要快速减肥?做好4件事,控制食欲、让胃口变小是关键!
- 招聘|学会拒绝,让你的工作更轻松
- 求职|真把自己当女猪脚了?女大学生实习看上富二代,花式讨好让人无语
- 厚黑学|厚黑学:掌握这三招,让你处事更得心应手
