编程概念(一):数据库相关

1、sql关键字写的顺序以及执行顺序

建议的书写顺序为:

SELECT [ DISTINCT ]
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY

执行顺序:

FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <grout_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_list>
LIMIT <limit_number>

2、数据库三范式

  • 1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解(只要是关系型数据库都满足1NF)
  • 2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性
  • 3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计可以做到

3、索引

  • 索引类型
    根据用途可分为:普通索引、唯一索引(可为空)、主键索引(特殊的唯一索引,不能为空)、组合索引(最左前缀)、覆盖索引、全文索引(类似搜索引擎)。根据结构可分为:BTREE、HASH(缺点有不适合于组合索引和覆盖索引情况、不能排序、不能范围查询<>和<=>不一样)、RTREE(适用于范围查询,空间索引)、FULL TEXT
  • 索引好处
    减少扫描数据量、避免排序和临时表、随机IO变为顺序IO
  • 索引缺点
    会增大开销,对UPDATE、INSERT等语句会有性能影响
  • 不使用索引场景
    有or、组合索引不符合规则、like查询是以%开头、优化引擎认为不用索引更快
  • 索引原理
    待完善

4、数据库事务

  • ACID原则(原子性、一致性、隔离性、持久性)
  • 隔离级别:未提交读、提交读(不可重复读)、可重复读(默认会导致幻读,可通过MVCC处理)、可串行(级别最高,开销最大)

5、mysql存储引擎

  • InnoDB
    默认事务型引擎,采用MVCC(多版本并发控制)支持高并发,实现了四个事务级别,默认可重复读(通过间隙锁处理了幻读)
  • MyISAM
    5.1之前的默认引擎,支持很多特性包括全文索引(5.6后InnoDB支持)、压缩、空间函数等,不支持事务和行级锁,崩溃不能安全恢复。某些场景性能很好,最典型性能问题是表锁

6、查询优化(不同场景可能结论不同,适用于大部分场景)

  • 看查询计划
  • 使用索引,特别是覆盖索引
  • 是否请求了不需要的数据
  • 减少查询数据量,比如join时先过滤数据,或对中间数据做缓存表
  • 用联表代替子查询
  • 尽可能减少sql执行次数,减少请求网络延时
  • 使用正确而小的数据类型,比如内建类型存时间,整数类型存ip
  • 尽量避免null
  • 冗余数据避免联表
  • 分表分区
  • 业务结构优化
  • 硬件、中间件等支持

——————————————————————————————

  • 注1:本文很多概念来源于《高性能MySQL》
  • 注2:以上概念无特别说明适用于mysql,不同数据库可能会有出入
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,801评论 0 44
  • 原文:https://blog.csdn.net/ligupeng7929/article/details/794...
    MaskStar阅读 1,067评论 0 1
  • 一、设计技巧 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系...
    LazzMan阅读 1,198评论 0 1
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 3,026评论 0 8
  • 数据库开发规范1. 数据库命名规范前缀对象前缀命名: 前缀命名一般用小写表的前缀: 业务模块组名前缀存储过程前缀:...
    PowerYangSoft阅读 2,547评论 0 8