MySQL 数据库设计理论基础

1.数据库设计的必要性:

数据库设计的三大范式:

1NF: 所有的域都应该是原子性的 (字段值不可再分 eg:详细地址分为省市区等多列,应该定义省市区三个字段,而不是详细地址字段)

2NF:所有的非主键字段必须与主键字段相关;不能与主键的部分相关(联合主键) -> 一张表描述一类事务

3NF:非主键字段必须与主键直接相关,而不能间接相关。 -> 依赖不能传递

扩展:

模糊查询影响查询效率

有时候为了性能需要违反三大范式(虽然增加了冗余,但是提升了性能)

2.E-R图

1) 数据库设计几大阶段

需求分析阶段

概念设计阶段

逻辑设计阶段

物理设计阶段

数据库实施阶段

运行和维护阶段

2) E-R图

菱形:表示实体与实体之间的联系

矩形:实体

连线:实体与实体之间的对应关系 1对多 多对多

3) 数据库表设计

一对一:

方式一:外键添加唯一约束

方式二:主键作为外键

一对多或者多对一:

在多的一方添加外键

多对多:

创建一张关系表(两个字段都是外键),并设置联合主键(保证实体完整性)

3.数据库优化: 可使用explain查看修改SQL
  1. 先筛选在join

  2. join 优于子查询(sql层级越深效率越低)

  3. order by (io瓶颈,CPU占用)

  4. 尽量走索引(索引失效状况)

  5. 尽量不要使用select * (避免全列扫描)

具体使用:在查询时,不要使用select *

*是通配符,使用了他,会查询该表所有的字段,然后继续剩余操作。

误区:

查询是以记录为单位,查询一个字段,或者两个字段,没什么区别,查询较少的字段不一定不多的性能好。

count(*),count(1)统计记录数 count(pk)统计字段数

含义不同,但是结果一致。

count(1)和count(pk)不是在所有的情况下都优于count(*)的

索引失效的状况:

1.索引列不能使用null,not null,!=,<> 即否定比较

2.索引列不要参与计算 四则运算,substr等 例如索引列sal: sal/10>100可以替换成sal >100*10

3.索引列不要使用包含 namel ike ‘%L%’ 尽量不要使用模糊查询,会导致全表扫面

4.不要使用 or(使用union 与union all替换,union all不会去重,所以性能比union好些)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值