`
isiqi
  • 浏览: 16077760 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Sql Hacks 阅读感悟——连接、联合和视图

阅读更多

SQL基础:《SQL HACKS》第2章——连接、联合和视图,总共列举了8tips,不破坏现有查询的修改模式、过滤行和列等,下述为我对这8tips的评析。

1、不破坏现有查询修改模式

情景描述:要对设备登记表增加一个办公室字段,但是却要保留以前的查询语句。

解决方案:新建设备登记新表,然后创建与原有设备登记表结构一样的视图,则对该视图的查询操作就是对原有设备登记表的查询操作。

评析:合理使用视图会有意外的收获,尤其是表结构发生更改后要保留遗留sql预热,通常通过创建视图都可以解决。

2、过滤行和列

评析:只从数据库查特定条件的记录和字段。所以切忌返回全表记录及记录的所有字段。

3、在索引列上过滤

评析:sql查询语句where条件,应尽量使用索引,正确地使用索引。至于如何创、使用索引作者给出下述描述:

1)在创建复合索引或复合主键时,仔细考虑各列的次序意义重大。确保每一个常用的列都至少在索引的第一个位置出现一次。

2)无疑应该把高区分度的列放在前面。

3= > 的连接条件,where子句通常能够很好地利用索引。

4、将子查询转换为JOIN

评析:多个查询sql语句,如果可以合并成一个sql查询语句,请尽量合并。切忌认为:

1)先查条件A满足的记录,得到集合A

2)然后将集合A作为条件,去查处集合B

5、将聚合子查询转换为Join

评析:将聚合子查询转换为join可以解决有些DB不支持子查询问题,并提高查询性能。

聚合子查询:通常做法都是表自连,并通过聚合函数作为where条件,这导致的结果就是对每行数据都会执行一次子查询。因此,将子查询转换为join,本章的第4tip可以有效提高查询效率。

6、简化复杂的更新

评析:有时很难通过一个sql语句就可以更新表数据,如每个上班族都遇到的扣税问题,写一条sql语句去更新税收比较费事。为此,可以通过构建视图或者游标进行简单处理。

7、为关系选择正确的连接风格

8、生成组合

评析:通常情况下,我们说的连接都是表的内连,但有时外联、交叉连接是必须的。比如本章提到的场景:赛程安排问题,就必须使用cross join

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics