数据库中写法注意事项


1 s ql写法

1.1 所有的查询语句 列名显示前都必须 加上表的“别名”
例:
s elect a,b,writeDate f rom tableA(nolock) l eft join tableB(nolock) on tableA.a = tableB.a
以上的写法,可能导致后续的扩展错误
假如在后期 tableB
tableB表中新增字段writeDate
那么就会导致 这条查询语句出错
所以
s elect a.a,a.b f rom tableA a(nolock) l eft join tableB b(nolock) on a.a=b.a

1.2 在数据库中禁止使用复杂计算 会导致sql查询计划失效
1.3 禁止使用 select * 会导致程序获取列所消耗时间 会使系统增加列导致其它异常
1.4 索引列上禁止使用 函数计算 这样会导致索引失效
1.5 sql查询中的参数数据类型需同数据库中表的数据类型一致 避免数据转换消耗cpu 、数据转换导致参数异常
1.6 参数化查询 避免SQL注入式漏洞
1.7 限制join个数
1.8 限制sql语句长度及in条件使用
1.9 避免大事务操作,这样会导致表死锁时间过长
1.10 关闭影响行数信息返回 听说sql 后续不支持此模式
1.11 s elect a f rom table(nolock) 查询语句后最好加上(nolock) 避免查询锁表
1.12 union all 比union要好 union all 程序不做排序和过滤 可以减少程序执行时间
1.13 exists 替换 in in 表 条数在上千条后 会影响性能 因为 in语句会转换为 s elect a f rom table where a=’a’ or select a f rom table where a=’b’ …
1.14 临时表 表变量 多用表变量 少用临时表 表变量 数据存储在内存中 速度会快一些
1.15 少用or运算符


2 字段规范

2.1字段名需要可以非常直接的表示字段的含义
2.2在不同的表中 需要关联的字段或表示相同含义的字段 字段名最好一致
2.3各数据类型按需求定义:
字符为 varchar nvarchar
金额货币 采用money
科学计数法 采用numeric
自增列采用bigint数据类型(避免增长导致数据不够用)
时间类型采用datetime数据类型

3 表规范

3.1 每张表都必须设置主键
3.2 少用外键
3.3 禁止列为NULL,方便后续程序的编写

4 表附加设置

4.1 常用的查询字段处 添加索引
4.2 order by 中常用字段 添加索引
4.3 表索引不要大于5个
4.4 如果列所存在的值为 1/-1 两个选项,此列最好不要添加索引
4.5 索引中包含列不要超过 5个


5 程序

5.1 程序需要保证数据完整性 ,将数据的大量检测放入程序中
5.2 复杂的s ql计算和转换尽量放入程序中进行