如何在sql server系统表中获得用户表的修改时间
2007-11-11 10:30:21 来源:WEB开发网在这部分里我们所有的例子都选择使用Microsoft SHOWPLAN_ALL输出,因为它更紧凑并且展示典型的信息。(Sybase的查询计划基本与此相同,可能包含其它一些信息)大部分的例子都是要么基于PUBS数据库,要么基于标准系统表的。我们在PUBS数据库中对用到的表进行了很大扩充,对很多表增加了好几万行。
子查询优化
一条好的值得称赞的规则是尽量用连接代替所有的子查询。优化器有时可以自动将子查询“扁平化”,并且用常规或外连接代替。但那样也不总是有效。明确的连接对选择表的顺序和找到最可能的计划给出了更多的选项。当你优化一个特殊查询时,了解一下是否去掉自查询可产生很大的差异。
示例
下面查询选择了pubs数据库中所有表的名字,以及每个表的聚集索引(如果存在)。如果没有聚集索引,表名仍然显示在列表中,在聚集索引列中显示为虚线。两个查询返回同样的结果集,但第一个使用了一个子查询,而第二个使用一个外连接时。比较Microsoft sql server(WINDOWS平台上强大的数据库平台)产生的查询计划:
(WINDOWS平台上强大的数据库平台) SQL语句调优技巧(图一)" width="450" height="253" />
(WINDOWS平台上强大的数据库平台) SQL语句调优技巧(图二)" width="450" height="235" />
不必更深探索,我们可以看到在CPU和总的实耗时间方面连接更快,仅需要子查询方案逻辑读的一半。此外,这两种情况伴随着相同的结果集,虽然排序的顺序不同,这是因为连接查询(由于它的GROUP BY子句)有一个隐含的ORDER BY:
(WINDOWS平台上强大的数据库平台) SQL语句调优技巧(图三)" width="275" height="476" />
查看这个子查询方法展示的查询计划:
(WINDOWS平台上强大的数据库平台) SQL语句调优技巧(图四)" width="431" height="333" />
更多精彩
赞助商链接