索引
定义:
索引是一个单独的,存储在磁盘上的数据结构,它们包含则对数据表里所有记录的引用指针,使用索引用于快速找出在某个或多个列中有某一特定值的行,对相关列使用索引是降低查询操作时间的最佳途径。索引包含由表或视图中的一列或多列生成的键。
索引的优点主要有以下几条:
(1).通过创建唯一索引,可以保证数据库表的每一行数据的唯一性。
(2).可以大大加快数据的查询速度,这也是创建索引的最主要的原因。
(3).实现数据的参照完整性,可以速表和表之间的连接。
(4).在使用分组和排序子句进行查询时,也可以显著减少查询中分组和排序的时间。
索引不利的一面:
(1).创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
(2).索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到做大文件尺寸。
(3).当对表中的数据进行增加,删除和修改的时候,索引也要动态地维护,这样就就降低了数据的维护速度。
创建索引:create[unique] index idxname on tabname(col….) include(col.)
删除索引:drop index idxname
表设计注意要点:
1.字符类型建议采用varchar/nvarchar数据类型
2.金额货币建议采用money数据类型
3.科学计数建议采用numeric数据类型
4.自增长标识建议采用bigint数据类型
5.时间类型建议采用为datetime数据类型
6.每张表必须有主键
7.不允许使用外键,数据完整性由程序控制
8.新加的表,所有字段禁止NULL
9.旧表新加字段,需要允许为NULL
SQL SERVER 规范
禁止在数据库做复杂运算
禁止使用SELECT *
禁止在索引列上使用函数或计算
尽量少使用游标
禁止使用触发器
禁止在查询里指定索引
变量/参数/关联字段类型必须与字段类型一致
限制JOIN个数
限制SQL语句长度及IN子句个数
尽量避免大事务操作
除非必要SELECT语句都必须加上NOLOCK
使用UNION ALL替换UNION
查询大量数据使用分页或TOP
NOT EXISTS替代NOT IN
尽量避免使用OR运算符
增加事务异常处理机制
输出列使用二段式命名格式
限制JOIN个数
•单个SQL语句的表JOIN个数不能超过5个
•
•过多的JOIN个数会导致查询分析器走错执行计划
•
过多JOIN在编译执行计划时消耗很大