当前位置: 首页 > 科技观察

SQL执行进度优化方法总结

时间:2023-03-20 17:53:01 科技观察

聚簇索引扫描SELECT*FROMC_SY_Ownedstorm聚簇索引扫描比表扫描快聚簇索引扫描:发生在聚簇表中,也相当于全表扫描操作,但是当操作在诸如此类的条件下时作为集群列,效率会更好。表扫描SELECT*FROM#temptablescan:当发生在堆表上,没有可用的索引时,会发生表扫描,表示扫描一次全表。测试SQLCREATETABLEt1(c1INT,c2VARCHAR(8000));GODECLARE@aINT;SELECT@a=1;WHILE(@a<=5000)BEGININSERTIINTOt1VALUES(@a,replicate('a',5000))SELECT@a=@a+1ENDGOSELECTcount(1)FROMt1groupbyc1哈希匹配:哈希匹配的作用是在右边两张行数比较少的表中通过哈希算法形成一个哈希表,然后再有一张行数比较多的表datarows这个过程基本上就是在表来之前形成的哈希表中匹配查找数据的过程。但是,哈希匹配操作的出现必须引起我们的警惕。当哈希匹配右边的两张表的数据明显少于另一张时,哈希匹配的效率会更高,反之亦然。影响效率。哈希匹配大概有以下几种情况:缺少或者不正确的索引缺少where子句在where子句中有类型转换或者对列进行数据操作,这样虽然在某些情况下是哈希匹配,但是索引无法使用效率会更高,但这并不意味着没有更好的方法来提高这个查询的效率,比如添加合适的索引或者通过where语句减少数据量。也就是说,当发生哈希匹配的操作时,我们要注意看看是否有其他方法可以提高查询效率。如果没有,也许哈希匹配是最好的选择。聚簇索引查找:CREATEUNIQUECLUSTEREDINDEX_IdONt1(c1)select*fromt1wherec1=3排序:排序比较消耗性能,sqlserver中的排序是找到数据后进行的。select*fromt1orderbydesc循环嵌套对于使用简单内连接的小型数据表,嵌套循环是最好的策略。最适用于两个表中的记录数相差很大且连接列上有索引的情况。嵌套循环连接需要最少的I/O和比较。嵌套循环在外表(通常是数据量较小的表)中一次循环一条记录,然后在内表中查找匹配的记录并输出。嵌套循环策略有很多名称。例如,对整个表或索引的查询称为Naive(无知的)嵌套循环连接。当使用普通索引或临时索引时,称为索引嵌套循环连接或临时索引嵌套循环连接。合并连接是在读取时比较一行的两个存储输入。在每一步,比较每个输入的下一行。如果两行相同,则输出一条连接线并继续。如果行不同,则丢弃两个输入行中较小的行并继续。由于输入是存储,连接丢弃的任何行必须小于两个输入中的任何剩余行,因此永远不能连接。合并联接不需要扫描两个输入的每一行。一旦到达两个输入之一的末尾,合并连接就会停止扫描。嵌套循环连接的总消耗与输入表中行的乘积成正比。与嵌套循环连接不同,合并连接表最多读取一次,总消耗与输入行总数成正比,所以对于大量的输入为什么连接是更好的选择。博文来源:http://www.cnblogs.com/linfangshuhellowored/p/4430293.html