游泳

使用SQL Server时最容易忽略的21个问题(3)

2019-12-04 03:28:27来源:励志吧0次阅读

不要使用服务器端光标 与服务器端光标比起来,客户端光标可以减少服务器和网络的系统开销,并且还减少锁定时间。 使用参数查询 有时,我在技术论坛看到类似这样的问题:“SELECT * FROM a WHERE a.id='A'B,因为单引号查询发生异常,我该怎么办?”,而普遍的回答是:用两个单引号代替单引号。这是错误的。这样治标不治本,因为你还会在其它一些字符上遇到这样的问题,更何况这样会导致严重的bug,除此以外,这样做还会使SQL Server的缓冲系统无法发挥应有的作用。使用参数查询, 釜底抽薪,这些问题统统不存在了。 在程序编码时使用大数据量的数据库 程序员在开发中使用的测试数据库一般数据量都不大,可经常的是最终用户的数据量都很大。我们通常的做法是不对的,原因很简单:现在硬盘不是很贵,可为什么性能问题却要等到已经无可挽回的时候才被注意呢? 不要使用INSERT导入大批的数据 请不要这样做,除非那是必须的。使用UTS或者BCP,这样你可以一举而兼得灵活性和速度。 注意超时问题 查询数据库时,一般数据库的缺省都比较小,比如15秒或者30秒。而有些查询运行时间要比这长,特别是当数据库的数据量不断变大时。 不要忽略同时修改同一记录的问题 有时候,两个用户会同时修改同一记录,这样,后一个修改者修改了前一个修改者的操作,某些更新就会丢失。处理这种情况不是很难:创建一个timestamp字段,在写入前检查它,如果允许,就合并修改,如果存在冲突,提示用户。 在细节表中插入纪录时,不要在主表执行SELECT MAX(ID) 这是一个普遍的错误,当两个用户在同一时间插入数据时,这会导致错误。你可以使用SCOPE_IDENTITY,IDENT_CURRENT和@@IDENTITY。如果可能,不要使用@@IDENTITY,因为在有触发器的情况下,它会引起一些问题(详见这里的讨论)。 避免将列设为NULLable 如果可能的话,你应该避免将列设为NULLable。系统会为NULLable列的每一行分配一个额外的字节,查询时会带来更多的系统开销。另外,将列设为NULLable使编码变得复杂,因为每一次访问这些列时都必须先进行检查。 我并不是说NULLS是麻烦的根源,尽管有些人这样认为。我认为如果你的业务规则中允许“空数据”,那么,将列设为NULLable有时会发挥很好的作用,但是,如果在类似下面的情况中使用NULLable,那简直就是自讨苦吃。 CustomerName1CustomerAddress1CustomerEmail1CustomerName2CustomerAddress2CustomerEmail3CustomerName1CustomerAddress2CustomerEmail3

如果出现这种情况,你需要规范化你的表了。 尽量不要使用TEXT数据类型 除非你使用TEXT处理一个很大的数据,否则不要使用它。因为它不易于查询,速度慢,用的不好还会浪费大量的空间。一般的,VARCHAR可以更好的处理你的数据。 尽量不要使用临时表 尽量不要使用临时表,除非你必须这样做。一般使用子查询可以代替临时表。使用临时表会带来系统开销,如果你是用COM+进行编程,它还会给你带来很大的麻烦,因为COM+使用数据库连接池而临时表却自始至终都存在。SQL Server提供了一些替代方案,比如Table数据类型。 学会分析查询 SQL Server查询分析器是你的好伙伴,通过它你可以了解查询和索引是如何影响性能的。 使用参照完整性 定义主健、唯一性约束和外键,这样做可以节约大量的时间。

宣威市第一人民医院怎么样
天津欧亚医院邵群智
昆明市哪家医院治癫痫病
开封治疗输卵管堵塞方法
温州治疗宫颈糜烂方法
分享到: