SQL相关知识复习总结

数据库涉及的三大范式

1、列不可再分 2、属性完全依赖于主键 3、属性不可以依赖其他非主属性,属性直接依赖于主键
三大范式只是一般设计数据库的理念,可以建立冗余较小、结构合理的数据库,如有特殊情况,需要区别对待,建立数据库主要是看需求和性能。需求>性能>表结构,不能一味的追求三大范式去建立数据库。

SQL中的约束

1、主键约束 2、唯一约束 3、检查约束 4、非空约束 5、外键约束

主键约束和唯一约束

主键约束,已经确定了唯一,不必再建立唯一约束,而且主键约束必须非空,而唯一约束可以为空。

SQL的执行顺序

table,where(在分组之前进行筛选),group by ,having(分组之后进行筛选),order by

SQL优化

1、尽量使用确定的列名,而少使用*
2、尽量少使用嵌套子查询,这种查询会耗费大量的cpu资源
3、避免使用耗费资源的操作
distinct(去重) union(合并结果集,去重) union all(合并结果集,不去重,对于cpu资源的占用要比union低) order by(排序) minus(相当于数学集合中的A减B) intersect(相当于数学集合中的A交B)
4、选择最有效的表名顺序,mysql解析表时,是从右向左进行解析,所以记录少的表名放在右边。例子,tableA是100行数据,tableB是一行数据,当然是使用一行数据与100行数据进行比较查找。
5、对于有比较多的or运算的查询,建议分成多个查询,使用union all进行连接
6、合理使用索引

SQL优化策略

1、使用索引时尽量全值匹配。(当索引多列时,遵循左前缀法则),即对于多列索引,不是使用的第一部分(第一个),则不会使用索引。
2、不在索引列上做任何操作,(计算,函数,隐式转换)
3、范围条件后的索引失效(>,<,in)等范围查询时,范围后的索引失效
4、覆盖索引尽量使用(查询列和索引列一致)
5、不等于要慎用
6、not null对索引有影响
7、like查询是以%开头
8、字符类型的引号不可以失去,去掉后会自动隐式转换,此时索引也会失效
9、OR改 union效率高。(如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因))
10、exists替换in
11、如果mysql估计使用全表扫描要比使用索引快,则不使用索引

数据库创建索引的优缺点

猜你喜欢

转载自blog.csdn.net/ilikejj0/article/details/81625659