-
让每个人平等地提升自我
1
关于
SQL Server
的若干注意事项
如果你正在负责一个基于
SQL
Server
的项目,或者你刚刚接触
SQL
Server
,你都有可能要
面临一些数据库性能的问题,
这篇文章会为你提供一些有用的指导
(其中大多数也可以用于
其它的
DBMS
)
。
在这里,我不打算介绍使用
SQL
Server
的窍门,也不能提供一个包治百病的方案,我
所做的是总结一些经验
----
关于如何形成一个好的设计。这些经验来自我过去几年中经受的
教训,一直来,我看到许多同样的设计错误被一次又一次的重复。
你了解你用的工具吗?
不要轻视这一点,这是我在这篇文章中讲述的最关键的一条。也许你也看到有很多的
SQL Server
程序员没有掌握全部的
T-SQL
命令和
SQL Server
提供的那些有用的工具。
“什么?我要浪费一个月的时间来学习那些我永远也不会用到的
SQL
命令???”
,
你
也许会这样说。对的,你不需要这样做。但是你应该用一个周末浏览所有的
T-SQL
命令。
在这里,你的任务是了解,将来,当你设计一个查询时,你会记起来:
“对了,这里有一个
命令可以完全实现我需要的功能”
,于是,到
MSDN
查看这个命令的确切语法。
不要使用游标
让我再重复一遍:
不要使用游标。
如果你想破坏整个系统的性能的话,
它们倒是你最有
效的首选办法。
大多数的初学者都使用游标,
而没有意识到它们对性能造成的影响。
它们占
用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,
它们可以使你的
DBA
所能做的一切性能优化等于没做。
不知你是否知道每执行一次
FETCH
就等于执行一次
SELECT
命令?这意味着如果你的游标有
10000
条记录,它将执行
10000
次
SELECT
!如果你使用一组
SELECT
、
UPDATE
或者
DELETE
来完成相应的工作,那将
有效率的多。
初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,
可很不幸,
这会导致糟糕
的性能。显然,
SQL
的总体目的是你要实现什么,而不是怎样实现。
我曾经用
T-SQL
重写了一个基于游标的存储过程,
那个表只有
100,000
条记录,
原来的
存储过程用了
40
分钟才执行完毕,
而新的存储过程只用了
10
秒钟。
在这里,
我想你应该可
以看到一个不称职的程序员究竟在干了什么!
!
!
我们可以写一个小程序来取得和处理数据并且更新数据库,
这样做有时会更有效。
记住:
对于循环,
T-SQL
无能为力。
我再重新提醒一下:使用游标没有好处。除了
DBA
的工作外,我从来没有看到过使用
游标可以有效的完成任何工作。
规范化你的数据表