2016-10-26 09:00
李富强
1.数据库表设计技巧
1.1 三个范式
1NF:原子性,属性不可拆分
2NF:实体的唯一性,没有两行一模一样的数据
3NF:不允许冗余,但在实际工作中可以存在适当的冗余以提升SQL性能
1.2 识别与处理多对多的关系
在多对多的关系中可以引入一个关系表
1.3 主键的取值方法
主键(聚集索引)最好用int类型
组合主键最多2个字段
1.4 字段类型的选择
int 最大值2亿
bigint 基本用不到最大值
业务需求允许的情况下日期字段最好选择int字段类型(?为什么)
表中不常用的字段最好拆分到单独的表存放
2.如何写出高效的SQL
2.1 在生产环境中最好不要出现select *
nvarchar(max)主从同步的时候易出错
优点:方便扩展
缺点:造成额外的书签查找或是由查找变为扫描
2.2 查询或者更新删除最好用top()
避免忘记写where条件时造成的误操作
2.3 查询要加with(nolock)
十五的隔离性被降低了
可能造成脏读,但不会造成堵塞
2.4 声明变量时指定长度
对T-SQL来说,不指定长度,默认长度为1,所以如果不指明长度的话容易造成变量值被截断
2.5 使用Schema前缀来选择表
不指定Schema会导致重编,小号CPU资源
2.5 字段不要放到函数中作为查询条件
即使字段有索引也用不了索引,导致SQL效率低
SQL的函数可以放到程序中去实现
2.6 避免字段发生隐式转换
where条件中,给字段赋的值要和字段的类型一直
2.7 SQL禁止使用 like '%××' 或者not like '%××'
这样的SQL不走索引,很耗CPU资源
%放在后面的可以走索引
2.8 如果id是自增长的主键,order by id desc 的效率比order by createtime desc 要高
2.9 比较复杂的逻辑在程序中进行处理
- 聚集索引和非聚集索引的区别
聚集索引:表中各行的物理顺序与键值的逻辑......
4.如何创建合适的索引
sqlserver创建主键时,默认创建聚集索引
5.表连接中的on条件和where条件
on条件在join运算前过滤
where条件在join之后过滤
推荐:keypress开源的密码管理工具