1 / 15
文档名称:

T-SQL应该注意的几点.doc

格式:doc   大小:3,801KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

T-SQL应该注意的几点.doc

上传人:Alone-丁丁 2021/8/17 文件大小:3.71 MB

下载得到文件列表

T-SQL应该注意的几点.doc

相关文档

文档介绍

文档介绍:T-SQL应该注意的几点
D
   
   
 

    合适的数据类型首先是从性能角度考虑,关于这一点,我写过一篇文章详细的介绍过,有兴趣可以阅读:对于表列数据类型选择的一点思考,这里我就不再细说了
   不要使用字符串类型存储日期数据,这一点也需要强调一些,有时候你可能需要定义自己的日期格式,但这样做非常不好,不仅是性能上不好,并且内置的日期时间函数也不能用了。
 

    解析对象的时候需要更多的步骤,。
    不仅如此,如果不指定Schema容易造成混淆,有时会报错。
    还有一点是,Schema使用的混乱有可能导致更多的执行计划缓存,换句话说,就是同样一份执行计划被多次缓存,让我们来看图3的例子。
   
   
 

    推荐使用实体对象+操作这种方式,比如Customer_Update这种方式。在一个大型一点的数据库会存在很多存储过程,不同的命名方式使得找到需要的存储过程变得很不方便。因此有可能造成另一种问题,就是重复创建存储过程,比如上面这个例子,有可能命名规范不统一的情况下又创建了一个叫UpdateCustomer的存储过程。
 
,尽量不要使用循环,可以使用CTE,如果要使用循环,也放到一个事务中
    这点其实显而易见。SQL Server是隐式事务提交的,所以对于每一个循环中的INSERT,都会作为一个事务提交。这种效率可想而知,但如果将1000条语句放到一个事务中提交,效率无疑会提升不少。
    打个比方,去银行存款,是一次存1000效率高,还是存10次100?下面,根据吉日的要求,补个例子,见代码1.
CREATE TABLE
(
Number INT PRIMARY KEY
);
--循环插入,不给力,我的笔记本45秒
DECLARE ***@index INT;
SET ***@index = 1;
WHILE ***@index <= 100000
BEGIN
INSERT (Number) VALUES( ***@index);
SET ***@index = ***@index + 1;
END
--放到一个事务中循环,略好,但也不是最好,我的笔记本1秒
BEGIN TRAN
DECLARE ***@index INT;
SET ***@index = 1;
WHILE ***@index <= 100000
BEGIN
INSERT (Number) VALUES( ***@index);
SET ***@index = ***@index + 1;
END
COMMIT
--批量插入,10W行,显示0秒,有兴趣的同学改成100W行进行测试
INSERT (Number)
SELECT TOP (100000) rn = ROW_NUMBER() OVER
(ORDER BY c1.[object_id])
FROM AS c1
CROSS JOIN AS c2
CROSS JOIN AS c3
ORDER BY c1.[object_id];
--CTE方式,和上面那种方式大同小异,也是批量插入,比如:
WITH cte AS(
SELECT TOP (100000) rn = ROW_NUMBER() OVER
(ORDER BY c1.[object_id])
FROM AS c1
CROSS JOIN AS c2
CROSS JOIN AS c3
ORDER BY c1.[object_id]
)
INSERT (Number) SELECT rn FROM cte
   
 
 

 
   换句话说,WHERE条件之后尽量可以使用可以嗅探参数的方式,比如说尽量少用变量,尽量少用函数,下面我们通过一个简单的例子来看这之