数据库设计及优化

设计范式

第一范式(二维数据表)

第二范式(要求数据表中非关键字不存在对组合关键字中字段函数依赖)

8569bfb8462ed4a2fa0dbc247e460a2572a.jpg

第三范式(要求数据表中非关键字不存在对组合关键字中字段单一关键字的函数依赖)、BC范式(如果是复合关键字,可选的复合关键字之间不能存在函数依赖)

c65672535f40f9f2253be3680941b4d9770.jpg

ff5a09da6e604f6c430e293d01bbee0617a.jpg

存储引擎

mysql目前最常用的存储引擎是Innodb

数据库设计原则

避免使用触发器:

因为会降低数据导入的效率,还可能出现意想不到的数据异常,或者是业务逻辑变得复杂,不利于维护(有可能后续维护的人不知道触发器的存在,项目运行的时候依然会触发触发器,使理解变得困难)

禁止使用预留字段:

301111f2a9a5648fd8de78d264feff92ef8.jpg

数据库索引优化:

数据库表优化:垂直拆分、水平拆分

数据库基础

54e566b94c753d77dc26aeb4c626b1b8b25.jpg

Join从句:

  • Inner Join

5b69a36953f21fbd95cecc43f9dfc21cd55.jpg

ee4f66a20738a90338986e332df38ec115b.jpg

  • Left Outer Join

ef3f1cf7b1717250937bb1e62b7c5da19da.jpg

f0b9c736d3b6d345354da153f850895e706.jpg

 

  • Right Outer Join

96c85e6d504f1772a019db627ee2bfdef7f.jpg

  • Full Join(实际上是左连接和右连接的合集)

b107aeeb2a8cd2dcdc826136e958ef77e07.jpg

My SQL 不支持Full Join查询,可采用UNION ALL 左连接和右连接来实现Full Join的查询结果

0a94b4cbac80c268accbfce97857f472225.jpg

  • cross join笛卡尔连接

笛卡尔连接不需要提供连接关键词。

721060c6c928e6353596b428e581cd1e6c5.jpg

查询结果集中数据条数 = user1中数据条数 * user2中数据条数

  • 使用join更新表

MySQL不支持更新包含在from从句中的表(即过滤条件中包含自身的表)

支持更新Update从句中的表

28846826ac17959cb03510d4e65c760a653.jpg

  • 使用join优化子查询

优化前:

5ba03f7b15a229d97e2c2e6bf2303566682.jpg

优化后:(减少子查询的次数,缩短查询时间)

b2a795405db6d70825e59306efd919fbb11.jpg

  • 使用join优化聚合查询

43998b9580f79153be92d2104ff03350462.jpg

查询取经四人组中成员各自打怪最多的日期

优化前:

c0e2cc5e7c439477899ed11f71bfc7a9c7a.jpg

优化后:(减少子查询,降低查询时间)

ba516a0085a5162dfe9470e262bc4c0c1e6.jpg

HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。

  • 实现分组选择数据

查询孙悟空、沙僧、猪八戒、唐僧打怪数量最多的两个日期

分别查询,使用的查询语句:

5bc558264978388ec8f589e09d37528a279.jpg

使用join查询语句一次查出所有数据:

6e5f61917a7b52b7c6098e5433a76b99da6.jpg

转载于:https://my.oschina.net/u/3764418/blog/1922942

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值