码迷,mamicode.com
首页 > 数据库 > 详细

数据库设计规范

时间:2018-09-27 13:06:47      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:扫描   tar   范围   表达   一个   触发器   sql语句   div   资源   

数据库相关的开发&优化原则
  1. 为每个数据表创建聚集索引,以及其它必要的索引(根据业务需求识别经常要查询的字段)
  2. 数据表结构的定义应该优先考虑降低SQL查询的复杂性
  3. 优先使用唯一索引来保证字段值的不重复性(用异常来识别重复插入)
  4. 可适当增加冗余字段降低查询的复杂度
  5. WHERE过滤条件要符合SARG原则
  6. 使用参数化查询,重用执行计划
  7. 共用数据库连接,避免反复打开。
  8. 尽量使用有序GUID,避免直接使用 newid()
  9. 禁止使用触发器,禁止使用存储过程,禁止使用CLR SP
  10. 避免在数据库中执行较复杂的业务逻辑(SP),或者复杂的数据转换、计算
  11. 尽量降低SQL语句的复杂性,可适当返回 粗粒度结果让 应用程序代码来处理
缺少索引的危害
  1. I/O -> 内存 -> CPU , 压力全部变大。
  2. 由于需要扫描大量记录,导致语句运行很慢。
  3. 容易产生大量的锁,阻塞其它进程,以及被阻塞。
  4. 由于持有过多的锁,出现死锁的机率也会变大。
缺少索引的改进建议
  1. 为表指定主键
  1. 为外键字段创建索引
  2. 为一些重要的查询条件创建索引
  3. 关注执行计划中高成本的:扫描,联接,分组,排序。
创建索引的注意事项
  1. 索引不是越多越好,尤其要避免产生冗余索引。
  2. 只为频繁查询的参考字段创建索引。
  3. 创建高选择性的索引(符合条件的行数与总行数之比)。
  4. 索引值不得超过900字节
  5. 不建议创建包含索引(除非那个查询非常稳定非常重要)
冗余索引的危害
  1. 更新数据的SQL运行更慢,因为要维护索引。
  2. 浪费更多的磁盘资源。
  3. 耗费更多的维护成本。
SARG是什么?
 
  SARG: Searchable Arguments
  搜索参数 (SARG) 可指定精确匹配、
  值的范围或由 AND 联接的两项或多项的连接,因此能够限制搜索范围。
 
  SARG格式:
  1. 列 运算符 <常量或变量>
  2. <常量或变量> 运算符 列
  SARG 运算符包括 =、>、<、>=、<=、IN、BETWEEN,
  有时还包括 LIKE(在进行前缀匹配时,如 LIKE ‘Fish%‘)。
  SARG 可以包括由 AND 联接的多个条件。
  非 SARG 运算符包括: NOT运算符 、函数调用 和 字段计算表达式。
 
不符合SARG的改进建议
  1. 有函数调用的:去掉函数掉用,调整语句。
  2. 字段计算表达式:将字段与常量分离。
  3. 使用 NOT:调整业务需求,使用一个较小的范围。
  4. 使用 NOT:根据业务需求,拆分表。
  5. LIKE‘%XXX%’ :调整业务需求,改写为 LIKE ‘XXX%’

数据库设计规范

标签:扫描   tar   范围   表达   一个   触发器   sql语句   div   资源   

原文地址:https://www.cnblogs.com/hemajia/p/9712279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!