这篇文章小编将重点和大家讨论SQL执行进度优化的方法。
聚集索引扫描
从 C_SY_Ownedstorm 选择*
聚集索引扫描比表扫描更快
聚集索引扫描:发生在聚集表中,相当于全表扫描操作,但是在聚集列等条件上操作效率会更好。
桌面扫描
从#temp中选择*
表扫描:发生在堆表中且没有可用索引时,发生表扫描,即全表扫描一次。
测试 SQL
创建表 t1(c1 INT, c2 VARCHAR (8000));
去
声明@a INT;
选择@a = 1;
同时 (@a <= 5000)
开始
插入 t1 值(@a,复制(‘a’,5000))
选择 @a = @a + 1
结束
去
从 t1 中选择计数(1)
按 c1 分组
哈希匹配:
哈希匹配的作用是利用哈希算法在右边两张表中行数较少的一张上组成一个哈希表,然后用另一张数据行数较多的表来使用先前形成的哈希表。希腊表中数据的匹配和搜索大致就是这个过程。但是,哈希匹配操作的出现必须提高我们的警惕。当哈希匹配右侧的两个表中的数据明显少于另一个时,哈希匹配效率会更高,反之亦然。影响效率。发生哈希匹配的情况大概有以下几种:
索引缺失或不正确
缺少单词
where子句中存在列类型转换或数据操作,因此无法使用索引
虽然哈希匹配在某些情况下效率更高,但这并不意味着没有更好的方法来提高这个查询的效率,比如添加适当的索引或者通过where语句减少数据量。也就是说,当哈希匹配操作发生时,我们需要注意看看是否有其他方法可以提高查询效率。如果没有,也许哈希匹配是最好的选择。
聚集索引查找:
创建唯一聚集索引_Id
ON t1(c1)
从 t1 中选择 *
其中 c1=3
排序:
排序会消耗性能。 SQL Server 中的排序是在找到数据后完成的。
从t1中选择*
按描述排序
循环嵌套
对于使用简单内连接的小数据规模,嵌套循环是最好的策略。最适合两个表记录数相差很大且相连列上有索引的情况。嵌套循环连接需要最少的 I/O 和比较。
嵌套循环每次循环遍历外表(通常是数据量较小的表)中的一条记录,然后在内表中找到匹配的记录并输出。嵌套循环策略有很多名称。例如,查询整个表或索引称为朴素嵌套循环连接。当使用普通索引或临时索引时,称为索引嵌套循环连接或临时索引嵌套循环连接。
合并连接
合并连接还在读取时比较两个存储输入的一行。在每个步骤中,比较每个输入的下一行。如果两行相同,则输出连接行并继续。如果行不同,则丢弃两个输入行中较小的一个并继续。由于输入是存储,因此连接丢弃的任何行都必须小于两个输入中的任何剩余行,因此永远无法连接。合并联接不需要扫描两个输入中的每一行。一旦合并连接到达两个输入之一的末尾,它就会停止扫描。
嵌套循环连接的总消耗与输入表中的行的乘积成正比。与嵌套循环连接不同,合并连接的表最多读取一次,总消耗与输入总行数成正比,那么为什么要join呢?大量输入的更好选择。
本文到此结束。如果您有任何相关技术问题,可以联系我们的技术人员远程解决。感谢大家对本站的支持!