我的目录是SQL Server特定(我敢肯定,很多更多):
使用优化搜索where子句 - 这意味着没有特别的功能标UDF在where子句中
WHERE NOT EXISTS往往是比左连接更快的选择,其中id是null结构,当您查找与第二个表不匹配的行时。
相关的子查询往往逐行运行,速度非常慢。
调用其他视图的视图不能被编入索引,并且变得非常慢,特别是如果您在大型表上获得多个级别。
由于至少有一列发送两次,这是浪费服务器和数据库及网络资源,所以选择*时应特别避免。
光标通常可以用速度更快的基于集合的逻辑来代替 当您以正确的方式存储数据时,可以避免很多即时转换。
更新时,请确保添加了where子句,以便不更新新值和旧值相同的行。这可能是更新10,000,000行和更新15样品之间的differnce(TSQL更新结构,如果使用其他数据库,你可能要查找正确的语法,但它应该给你的想法。):
Update t
set field1 = t2.field2
from table1 t
join table2 t2 on t.tid = t2.tid
Where t.field1 <> t2.field2
或者
Update t
set field1 = @variable
from table1 t
Where t.field1 <> @variable
如果你经常使用的一个字段的功能,你可能无法正确保存它(或你应该有一个持久计算领域,并做改造每次选择列的时间只有一次没有。)
你最好b et是为你的数据库选择一个好的性能调优书(最适合数据库的最好的),并阅读有关编写查询的章节。
我会与'select * from'的情况争论。取决于特定的SQL编译器(每个数据库引擎如何编译它接收的某种字节码的SQL)的工作方式,它可能需要或可能不需要额外的工作。你没有指定任何特定的数据库。 – 2011-05-02 13:38:27
'between'是否比'<' and '>'更好取决于特定的SQL优化器。有了它,它总能看到它是一个范围,但它可能会或可能不会被使用,而'<' and '>'它可能会错过它的范围。 – 2011-05-02 13:40:12
优秀的问题 – HLGEM 2011-05-02 14:00:08