SQLServer数据库开发的二十一条规则

SQLServer数据库开发的二十一条规则
在这里,我不打算介绍使用SQL Server技巧,不能提供治愈,我所做的是总结一些经验,如何形成一个良好的设计。这些经验来自我在过去几年学到的经验教训,我已经看到了许多相同的设计错误反复一遍又一遍。

1。理解你使用的工具

不要小看这个,这是最关键的一个我在本文中所描述的。也许你也看到很多SQL Server程序员并不掌握所有的T-SQL命令和SQL Server提供的有用的工具。

我已经浪费了一个月学习SQL命令,我不会用,你可能会说,是的,你没有去做。但你要在周末浏览所有T-SQL命令。在这里,你的任务是理解,在未来,你设计一个查询的时候,你会记住:是的,有一个命令,完全可以满足我需要的功能,所以我可以去MSDN看到该命令的具体语法。

两。不要使用游标

让我重复一遍:不要使用光标。如果你想破坏整个系统性能,它们是你最有效的选择。大多数初学者使用游标而不知道它们对性能的影响。它们以不可想象的方式占用内存和锁定表。此外,它们就像蜗牛,最糟糕的是,它们可以使DBA的所有性能优化。我想知道,如果您知道每一个取数都等于选择命令的实现,这意味着如果游标有10000的记录,它将执行10000次选择!如果使用一组选择、更新或删除来完成这项工作,它将更加有效。

初学者通常认为使用游标是一种熟悉而舒适的编程方式,但不幸的是,它会导致性能不佳。显然,SQL的总体目标是您将要实现的目标,而不是如何实现它。

我用T-SQL重写存储过程基于游标,它只有100000的记录。最初的存储过程花费了40分钟来完成,新的存储过程花费了10秒,在这里,我认为您应该能够看到一个不称职的程序员正在做什么!!!

我们可以写一个小程序来处理数据和数据库的更新,有时是更有效的。记住:没有什么可以做的周期问题。

让我再次提醒一下:使用游标是没有用的。除了DBA的工作,我还从未见过使用游标有效地完成工作。

三。规范化你的数据表

有关于为什么数据库是不规范的两条理由:为性能考虑,纯粹是由于懒惰。至于第二,你将不得不支付它迟早。以及性能的问题,你不需要优化的东西是不是在所有缓慢。我经常看到一些程序员反规范化的数据库,他们的理由是,原来的设计太慢,但结果往往是他们使系统slower.dbms是设计来处理数据库的规范,所以记得要按规范要求设计数据库。

四。不要使用选择*

这是不容易做到的,我知道太多,因为我做了很多。但是,如果您指定您需要的列在选择,它将带来以下好处:

1减少内存消耗和网络带宽
2你可以得到更安全的设计
3给查询优化器从索引中读取所有必需列的机会。

五。了解您将如何处理这些数据

创建你的数据库鲁棒性指标,这是一件功德。这样做是一种艺术。每次你添加一个索引表,选择会比较快,但插入和删除会慢很多,因为创造维护索引需要很多额外的工作。显然,在这里是你想做的事与表的关键问题。这个问题不是很好,特别是当它涉及到删除和更新,因为这些语句通常包含在其中的部分选择命令。

六。不要为性列创建索引。

首先,我们必须了解指数加速表的访问。你可以了解指数的一种方式,将基于一定标准的表。如果你创建一个柱状性的一个指标,你只是将表格分为两部分:男人和女人。你面对的是一个表1000000记录,什么是分工的意义:维持指数time-consuming.when你设计的一个指标,遵循这一原则:根据不同内容的数量,列可能包含由多到少,如姓名+性别+省。

七。使用事务

请使用事务,特别是当查询更time-consuming.if系统中存在一个问题,它会拯救你的生命。在一般情况下,一些有经验的程序员都有经验,你经常会遇到意想不到的情况,导致存储程序崩溃。

八。小心死锁

按一定顺序访问表,如果先锁定表,然后锁定表B,然后按顺序将它们锁定在所有存储过程中,如果在存储过程中先锁定表B,然后锁定表A,则可能导致死锁,如果锁顺序没有预先设计好,死锁就不容易找到。

九。不要打开大型数据集

一个经常被问到的问题是:我如何添加记录100000组合快速,这是错的,你不能不去做。这是很简单的。你的用户必须浏览100000条记录才能找到所需的记录,他会诅咒你。在这里,你需要的是一个更好的用户界面,你需要为用户显示不超过100或200条记录。

十。不要使用服务器端游标。

与服务器端游标相比,客户端游标可以减少服务器和网络的系统开销,并减少锁定时间。

十一。使用参数查询

有时,我看到在CSDN技术论坛这样一个问题:选择*从哪张= 'a'b,因为单引号查询是不正常的,我应该做什么一般的答案是使用两个单引号,而不是单引号。这是错误的。这样的临时解决方案是无效的,因为在其他字符上也会遇到这样的问题。此外,这将导致严重的错误。否则,SQL Server的缓冲系统无法发挥应有的作用,使用查询参数,根本解决不了这些问题,都不存在。

十二。在程序编码中使用大量数据的数据库。

程序员在开发中使用的测试数据库不是大量的数据,但最终用户往往拥有大量的数据。我们的常规做法是错误的,原因很简单:现在硬盘不是很昂贵,但是为什么性能问题要等到它是不可撤销的呢

十三。不要使用INSERT来导入大量数据。

请不要这样做,除非它是必要的。使用UTS或BCP可以让你一下子有灵活性和速度

十四。注意加班问题

查询数据库时,一般数据库的默认值相对较小,比如15秒或30秒,有些查询运行时间比这长,尤其是数据库中的数据量变大时。

十五。不要忽略同时更改同一记录的问题。

有时,两个用户在同一时间修改同一个记录,以便后者修改前一个修饰符的操作,一些更新将丢失。处理这种情况并不困难:创建一个时间戳字段,在写入之前检查它,如果允许,合并和修改,如果有冲突,提示用户。

十六。在详细表中插入记录时,不要在主表上执行选择max(id)。

这是一个常见的错误,从而导致错误当用户插入的数据在同一时间。你可以使用scope_identity,ident_current,和身份。如果可能的话,不要用身份,因为在触发的情况下,它会导致一些问题(看到这里的讨论)。

十七。避免设置的栏目为空

如果可能的话,你应该避免设置的栏目为空,系统分配的每一行的空列一个额外的字节,和查询将带来更多的系统开销。此外,设置栏目为空使编码复杂,因为每一次的列的访问,必须首先检查。

我不是说空是麻烦的根源,尽管有些人是这么认为的。我认为如果你允许空数据,业务规则,将被设置为可空有时会起到很好的作用,但是如果你在类似这种情况下使用空,简直是自找的。

customername1
customeraddress1
customeremail1
customername2
customeraddress2
customeremail3
customername1
customeraddress2
customeremail3

如果是这样的话,你需要标准化你的手表。

十八。尽量不要使用文本数据类型

不使用它,除非你使用文字来处理大量的数据,因为它是不容易的查询,速度慢,不好用会浪费很多空间。一般来说,VARCHAR可以处理你的数据更好。

十九。尽量不要使用临时表

尽量不要使用临时表,除非你必须这样做。子查询可以用来代替一个临时表。使用临时表可以带来的系统开销。如果你的程序与COM+,它会给你带来很多麻烦,因为COM+使用数据库连接池和临时表中存在的所有time.sql Server提供了一些替代品,如表数据类型。

二十。学会分析和查询
SQLServer查询分析器是您的好合作伙伴,通过它您可以了解查询和索引是如何影响性能的。

二十一。参考完整性的使用
定义主要的健康、唯一性约束和外键,这样可以节省很多时间。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部