为什么SQL Server中的非DB相关函数确实如此慢?

时间:2009-10-08 08:59:53

标签: sql-server performance methods

我总是听说SQL Server中的非DB相关函数(例如字符串比较,循环)很慢,因为它是一个数据库。但是,与完全编程语言相比,为什么这些方法会使这些方法爬行?

3 个答案:

答案 0 :(得分:1)

字符串比较并不比任何编译程序慢,但通常,你比较许多字符串(比如表中的每一行),而且速度很慢。

至于循环:DB不是编译器。它读取您的SQL然后解释它。如果您可以发送已编译的代码并让数据库执行它,您就不会注意到速度差异,但DB必须反复解释相同的代码。

如果你很幸运,数据库会将一个循环转换为某种内部形式(字节代码或数据结构),但是a)花费的时间不仅仅是将CPU指向某些代码而且b)它仍然需要运行更多代码来解释字节代码或数据结构。对于循环,它必须评估每一轮的条件。

答案 1 :(得分:1)

关系数据库经过优化,可以在集合中执行操作。像光标或循环或相关子查询这样需要数据库逐行工作的东西会变慢,通常很慢。用基于集合的代码替换该代码(数据库设计为最佳处理的那种代码)通常会将性能从几小时提高到几毫秒。

答案 2 :(得分:0)

因为它们被解释而不是编译为机器/ CPU指令。