数据库代码编写规范
来源:互联网 发布:php开源erp系统 编辑:程序博客网 时间:2024/05/20 10:14
1.除非影响业务,读取表(select)时,请使用WITH(NOLOCK),以提高并发性;
2.除了exists语句外,不要使用SELECT *,必须指明列名;
3.多表链接时,取有意义的表别名,并在每列前加表别名(如:a.id,b.name....),不要偷懒,防止对表增改列而造成列名冲突。同时可增强可读性;
4.使用表,存储过程,函数等资源时,必须指明架构(scheme).如:“dbo.property”;
5.不要对条件列使用函数(如:datediff(dd,createAt,getdate())),函数运算会导致索引失效;
6.除非必要,不使用OR或NOT IN ,NOT LIKE,<>之类的负逻辑;
7.查询条件中,特别是负逻辑,对于允许为空(nullable)的列必须有ISNULL,IS NULL或IS NOT NULL的判断逻辑;
8.查询条件(WHERE)尽量使用索引查找,尽可能缩小返回的数据集范围;
9.如果返回的结果集过大(典型参数下,结果集超过50条),需进行分页;
10.除非必要,不要使用显式事物(BEGIN TRAN),包括程序框架封装的事物,即使使用事物,也要保证事物尽可能的短;
11.SELECT,UPDATE,DELETE时,查询条件中变量数据类型与表列数据类型一致;表连接join时,连接条件的数据类型应一致;
数据库中数据类型是严格的,不匹配就会有数据类型转换,如果这个导致的转换最终是在大量的数据行上,那会产生极大的性能影响。注意条件和JOIN中的数据类型转换。尽可能使用显示的数据类型转换,并将转换的目标常量/定量/参数或者数据量少的一方。
特别的,在JOIN中String类型的参数到数据库中默认就映射为NVARCHAR(4000),如果对应表的字段类型是varchar或char等非unicode的字符类型,在SQL2005及以前版本将会完全用不上索引,在SQL2008版本中的索引效率也非常低。JDBC配置中加上sendStringParametersAsUnicode=false;
12.申明临时表和表变量时,字段的数据类型应尽量小,以节省资源;通常情况下,请使用有主键的表变量;
13.必须才存储过程(sp)头部添加“change log”,说明修改意图,并在修改处加以标识;
14.如果引用了链接服务器,或者使用了跨数据库的资源,需要在sp头部说明;
15.尽可能不实用触发器,尽量在程序中实现相应逻辑;
16.除非无替代方案,不要使用游标;
17.尽量避免在数据库中使用模块化的设计思想,避免多层嵌套视图
查询涉及的每隔视图可能很简单,但层层嵌套组合起来,可能最终形成一个复杂查询;
18.如果设计到分区表,则一定要有分区列的条件,且数据类型必须匹配;
19.除非影响业务,应在存储过程中设置相应的开关
a)SET NOCOUNT ON
当SET NOCOUNT为ON时,不返回计数。当SET NOCOUNT为OFF时,返回计数。当设置SET NOCOUNT为ON时,将不向客户端发送存储过程中每个语句的DONE_IN_PROC消息,如果存储过程中包含一些并不返回许多实际数据的语句,网络通信流量便会大量减少,因此,将SET NOCOUNT设置为ON可显著提高性能。
b)SET XACT_ABORT ON(视实际业务需要,不做硬性要求)
当SET XACT_ABORT为ON时,如果执行Transact-SQL语句产生运行时错误,则整个事物将终止并回滚。
- 数据库代码编写规范
- C#代码编写规范
- 代码编写规范说明书
- 测试代码编写规范
- Java代码编写规范
- C#代码编写规范
- .net代码编写规范
- .net代码编写规范
- .net代码编写规范
- Verilog代码编写规范
- .net代码编写规范
- C#编写代码规范
- C#代码 编写规范
- JAVA代码编写规范
- Java代码编写规范
- php代码编写规范
- PHP代码编写规范
- 编写Shell代码规范
- 【HDU 1839】 Delay Constrained Maximum Capacity Path(二分+最短路)
- (NO.00004)iOS实现打砖块游戏(十):砖块!更多的砖块!
- 【计算机知识】——MBR和GPT对比
- jQuery的i18n插件的一个限制
- [Android--Tool]Gradle sync started: NullPointerException: null
- 数据库代码编写规范
- hdu 5586 sum
- 【Leetcode】Restore IP Addresses
- Spring MVC 核心处理流程
- 黑马程序员—Java基础之—JDK新特性
- pAdTy_2 构建连接网络和云的应用程序
- mac 执行sed -i指令时,总是出现extra characters at the end of command
- Fragment在ViewPager中的生命周期
- 程序、进程、作业之间的区别与联系