设计范式mysql
第一范式(二维数据表)sql
第二范式(要求数据表中非关键字不存在对组合关键字中字段函数依赖)数据库
第三范式(要求数据表中非关键字不存在对组合关键字中字段或单一关键字的函数依赖)、BC范式(若是是复合关键字,可选的复合关键字之间不能存在函数依赖)数据库设计
存储引擎函数
mysql目前最经常使用的存储引擎是Innodb优化
数据库设计原则设计
避免使用触发器:3d
由于会下降数据导入的效率,还可能出现意想不到的数据异常,或者是业务逻辑变得复杂,不利于维护(有可能后续维护的人不知道触发器的存在,项目运行的时候依然会触发触发器,使理解变得困难)blog
禁止使用预留字段:索引
数据库索引优化:
数据库表优化:垂直拆分、水平拆分
数据库基础
Join从句:
- Inner Join
- Left Outer Join
- Right Outer Join
- Full Join(其实是左链接和右链接的合集)
My SQL 不支持Full Join查询,可采用UNION ALL 左链接和右链接来实现Full Join的查询结果
- cross join笛卡尔链接
笛卡尔链接不须要提供链接关键词。
查询结果集中数据条数 = user1中数据条数 * user2中数据条数
- 使用join更新表
MySQL不支持更新包含在from从句中的表(即过滤条件中包含自身的表)
支持更新Update从句中的表
- 使用join优化子查询
优化前:
优化后:(减小子查询的次数,缩短查询时间)
- 使用join优化聚合查询
查询取经四人组中成员各自打怪最多的日期
优化前:
优化后:(减小子查询,下降查询时间)
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式相似。WHERE 搜索条件在进行分组操做以前应用;而 HAVING 搜索条件在进行分组操做以后应用。HAVING 语法与 WHERE 语法相似,但 HAVING 能够包含聚合函数。HAVING 子句能够引用选择列表中显示的任意项。
- 实现分组选择数据
查询孙悟空、沙僧、猪八戒、唐僧打怪数量最多的两个日期
分别查询,使用的查询语句:
使用join查询语句一次查出全部数据: