使用T-SQL的好习惯
代码1.几种插入方式的比较 7.where条件之后尽量减少使用函数或数据类型转换换句话说,WHERE条件之后尽量可以使用可以嗅探参数的方式,比如说尽量少用变量,尽量少用函数,下面我们通过一个简单的例子来看这之间的差别。如图4所示。 更多精彩内容:http://www.bianceng.cn/database/SQLServer/ 图4.在Where中使用不可嗅探的参数导致的索引查找 对于另外一些情况来说,尽量不要让参数进行类型转换,再看一个简单的例子,我们可以看出在Where中使用隐式转换代价巨大。如图5所示。 图5.隐式转换带来的性能问题 8.不要使用旧的连接方式,比如(from x,y,z)可能导致效率低下的笛卡尔积,当你看到下面这个图标时,说明查询分析器无法根据统计信息估计表中的数据结构,所以无法使用Loop join,merge Join和Hash Join中的一种,而是使用效率地下的笛卡尔积。 这里我再补充一点,我说得是“可能”导致,因为上面这个查询可能作为中间结果或是子查询,当你忘写了where条件时,会是笛卡尔积。你在最终结果中再用where过滤,可能得到的结果一模一样,但是中间的过程却大不相同 所以,尽量使用Inner join的方式替代from x,y,z这种方式。 9.使用游标时,加上只读只进选项首先,我的观点是:游标是邪恶的,尽量少用。但是如果一定要用的话,请记住,默认设置游标是可进可退的,如果你仅仅设置了 declare c cursor for 这样的形式,那么这种游标要慢于下面这种方式。 declare c cursor local static read_only forward_only for… 所以,在游标只读只进的情况下,加上上面代码所示的选项。 10.有关Order一些要注意的事情首先,要注意,不要使用Order by+数字的形式,比如图6这种。 图6.Order By序号 当表结构或者Select之后的列变化时,这种方式会引起麻烦,所以老老实实写上列名。 还有一种情况是,对于带有子查询和CTE的查询,子查询有序并不代表整个查询有序,除非显式指定了Order By,让我们来看图7。 图7.虽然在CTE中中有序,但显式指定Order By,则不能保证结果的顺序 (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |