作家
登录

常用SQL Server规范集锦?看这里~

作者: 来源: 2017-10-17 11:03:36 阅读 我要评论

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!


如不雅萌芽中本地变量应用了不等式运算符,萌芽分析器应用了一个简单的 30% 的算式来预估

常用SQL Server规范集锦?看这里~

1. 字符类型建议采取 varchar/nvarchar 数据类型

2. 金额泉币建议采取 money 数据类型

3. 科学计数建议采取 numeric 数据类型

4. 自增长标识建议采取 bigint 数据类型 (数据量一大年夜,用 int 类型就装不下,那今后改革就麻烦了)

5. 时光类型建议采取为 datetime 数据类型

6. 禁止应用 text、ntext、image 老的数据类型

7. 禁止应用 xml 数据类型、varchar(max)、nvarchar(max)

束缚与索引

每张表必须有主键

  • 每张表必须有主键,用于强迫实体完全性
  • 单表只能有一个主键(不许可为空及反复数据)
  • 尽量应用单字段主键

不许可应用外键

  • 外键增长了表构造变革及数据迁徙的复杂性
  • 外键对插入,更新的机能有影响,须要检查主外键束缚
  • 数据完全性由法度榜样控制

NULL 属性

如不雅萌芽中本地变量应用了等式运算符,则萌芽分析器应用:精确度 * 表记录总数来预估

新加的表,所有字段禁止 NULL

(新表为什么不许可 NULL?

许可 NULL 值,会增长应用法度榜样的复杂性。你必须得增长特定的逻辑代码,以防止出现各类不测的 bug

三值逻辑,所有等号(“=”)的萌芽都必须增长 isnull 的断定。

Null=Null、Null!=Null、not(Null=Null)、not(Null!=Null) 都为 unknown,不为 true)

举例来解释一下:

如不雅表琅绫擎的数据如图所示:

你鲜攀来找查找除了 name 等于 aa 的所稀有据,然后你就不经意间用了 SELECT * FROM NULLTEST WHERE NAME<>’aa’

结不雅发明与预期不一样,事实上它只查出了 name=bb 而没有查找出 name=NULL 的数据记录

SELECT * FROM NULLTEST WHERE ISNULL(NAME,1)<>’aa’

然则大年夜家可能不知道 ISNULL 会引起很严重的机能瓶颈 , 所以很多时刻最好是在应用层面限制用户的输入,确保用户输入有效的数据再进行萌芽。

旧表新加字段,须要许可为 NULL(避免全表数据更新 ,经久持锁导致壅塞)(这个主如果推敲之前表的改革问题)

索引设计准则

  • 应当对 WHERE 子句中经常应用的列创建索引
  • 应当对经常用于连接表的列创建索引
  • 应当对 ORDER BY 子句中经常应用的列创建索引
  • 不该该对小型的表(仅应用几个页的表)创建索引,这是因为完全表扫描操作可能比应用索引履行的萌芽快
  • 单表索引数不跨越 6 个
  • 不要给选择性低的字段建单列索引
  • 充分应用独一束缚
  • 索引包含的字段不跨越 5 个(包含 include 列)

不要给选择性低的字段创建单列索引

  • SQL SERVER 对索引字段的选择性有请求,如不雅选择性太低 SQL SERVER 会放弃应用
  • 不合适创建索引的字段:性别、0/1、TRUE/FALSE
  • 合适创建索引的字段:ORDERID、UID 等

充分应用独一索引

独一索引给 SQL Server 供给了确保某一列绝对没有反复值的信息,当萌芽分析器经由过程独一索引查找到一笔记录则会急速退出,不会持续查找索引

限制 IN 子句中前提个数

表索引数不跨越 6 个

表索引数不跨越 6 个(这个规矩只是携程 DBA 经由实验之后制订的。。。)

  • 索引加快了萌芽速度,然则却会影响写人道能
  • 一个表的索引应当结合这个表相干的所有 SQL 综合创建,尽量归并
  • 组合索引的原则是,过滤性跃?锬字段越靠前
  • 索引过多不仅会增长编译时光,也会影响数据库选择最佳履行筹划

SQL 萌芽

  • 禁止在数据库做复杂运算
  • 禁止应用 SELECT *
  • 禁止在索引列上应用函数或计算
  • 禁止应用游标
  • 禁止应用触发器
  • 禁止在萌芽里指定索引
  • 变量 / 参数 / 接洽关系字段类型必须与字段类型一致
  • 参数化萌芽
  • 限制 JOIN 个数
  • 限制 SQL 语句长度及 IN 子句个数
  • 尽量避免大年夜事务操作
  • 封闭影响的行计数信息返回
  • 除非须要 SELECT 语句都必须加上 NOLOCK
  • 应用 UNION ALL 调换 UNION
  • 萌芽大年夜量数据应用分页或 TOP
  • 递归萌芽层级限制
  • NOT EXISTS 替代 NOT IN
  • 临时表与表变量
  • 应用本地变量选择中庸履行筹划
  • 尽量避免应用 OR 运算符
  • 增长事务异常处理机制
  • 输出列应用二段式定名格局

禁止在数据库做复杂运算

  • XML 解析
  • 字符串类似性比较
  • 字符串搜刮(Charindex)
  • 复杂运算在法度榜样端完成

禁止应用 SELECT *

  • 削减内存消费和收集带宽
  • 给萌芽优化器有机会大年夜索引攫取所须要的列
  • 表构造变更时轻易引起萌芽掉足

禁止在索引列上应用函数或计算


  推荐阅读

  区块链与分布式账本达到“生产成熟期”预计仍需5至10年

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! Gartner副总裁兼出色分析师Donald Feinberg表示:“在迈向数字化营业的过程中,数据治理仍会处在核心肠>>>详细阅读


本文标题:常用SQL Server规范集锦?看这里~

地址:http://www.17bianji.com/lsqh/37987.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)