本文知识点较多,篇幅较长,请耐心学习
MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。

为什么要优化
系统的吞吐量瓶颈往往出现在数据库的访问速度上
随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢
数据是存放在磁盘上的,读写速度无法和内存相比
如何优化
设计数据库时:数据库表、字段的设计,存储引擎
利用好MySQL自身提供的功能,如索引等
横向扩展:MySQL集群、负载均衡、读写分离
SQL语句的优化(收效甚微)
字段设计
字段类型的选择,设计规范,范式,常见设计案例

原则:尽量使用整型表示字符串
存储IP
INET_ATON(str),address to number

INET_NTOA(number),number to address

MySQL内部的枚举类型(单选)和集合(多选)类型
但是因为维护成本较高因此不常使用,使用关联表的方式来替代enum

原则:定长和非定长数据类型的选择
decimal不会损失精度,存储空间会随数据的增大而增大。double占用固定空间,较大数的存储会损失精度。非定长的还有varchar、text

金额
对数据的精度要求较高,小数的运算和存储存在精度问题(不能将所有小数转换成二进制)

定点数decimal
price decimal(8,2)有2位小数的定点数,定点数支持很大的数(甚至是超过int,bigint存储范围的数)

小单位大数额避免出现小数
元->分

字符串存储
定长char,非定长varchar、text(上限65535,其中varchar还会消耗1-3字节记录长度,而text使用额外空间记录长度)

原则:尽可能选择小的数据类型和指定短的长度
原则:尽可能使用 not null
非null字段的处理要比null字段的处理高效些!且不需要判断是否为null。

null在MySQL中,不好处理,存储需要额外空间,运算也需要特殊的运算符。如select null = null和select null <> null(<>为不等号)有着同样的结果,只能通过is null和is not null来判断字段是否为null。

如何存储?MySQL中每条记录都需要额外的存储空间,表示每个字段是否为null。因此通常使用特殊的数据进行占位,比如int not null default 0、string not null default ‘’

原则:字段注释要完整,见名知意
原则:单表字段不宜过多
二三十个就极限了

原则:可以预留字段
在使用以上原则之前首先要满足业务需求

关联表的设计
外键foreign key只能实现一对一或一对多的映射

一对多
使用外键

多对多
单独新建一张表将多对多拆分成两个一对多

一对一
如商品的基本信息(item)和商品的详细信息(item_intro),通常使用相同的主键或者增加一个外键字段(item_id)

范式 Normal Format
数据表的设计规范,一套越来越严格的规范体系(如果需要满足N范式,首先要满足N-1范式)。N

第一范式1NF:字段原子性
字段原子性,字段不可再分割。

关系型数据库,默认满足第一范式

注意比较容易出错的一点,在一对多的设计中使用逗号分隔多个外键,这种方法虽然存储方便,但不利于维护和索引(比如查找带标签java的文章)

第二范式:消除对主键的部分依赖
即在表中加上一个与业务逻辑无关的字段作为主键

主键:可以唯一标识记录的字段或者字段集合。

course_name course_class weekday(周几) course_teacher
MySQL 教育大楼1525 周一 张三
Java 教育大楼1521 周三 李四
MySQL 教育大楼1521 周五 张三
依赖:A字段可以确定B字段,则B字段依赖A字段。比如知道了下一节课是数学课,就能确定任课老师是谁。于是周几和下一节课和就能构成复合主键,能够确定去哪个教室上课,任课老师是谁等。但我们常常增加一个id作为主键,而消除对主键的部分依赖。

对主键的部分依赖:某个字段依赖复合主键中的一部分。

解决方案:新增一个独立字段作为主键。

第三范式:消除对主键的传递依赖
传递依赖:B字段依赖于A,C字段又依赖于B。比如上例中,任课老师是谁取决于是什么课,是什么课又取决于主键id。因此需要将此表拆分为两张表日程表和课程表(独立数据独立建表):

id weekday course_class course_id
1001 周一 教育大楼1521 3546
course_id course_name course_teacher
3546 Java 张三
这样就减少了数据的冗余(即使周一至周日每天都有Java课,也只是course_id:3546出现了7次)

呵呵呵切克闹,Mysql优化来一套。相关推荐

  1. 小型网站到大型网站-Mysql优化

    2019独角兽企业重金招聘Python工程师标准>>> 背景 好的大型网站都是从小型网站慢慢演变来的,都不是一步就设计好的.现在的淘宝,03年创建的时候它也是只有一台服务器,使用的是 ...

  2. mysql主键自增长_全面的MySQL优化面试解析

    本文概要 文章内图片有损,需要高清可以在公众号内回复"大图" 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理 ...

  3. Mysql 优化的一些要点

    本文是学习<高性能 Mysql>中关于 Mysql 中查询优化需要注意的一些要点的总结: Schema 和数据类型优化 尽量避免使用 NULL 值,尤其存在索引时,因为如果 NULL 列是 ...

  4. MySQL优化(2)--------常用优化

    前言 之前已经简单介绍了MySQL的优化步骤,那么接下来自然而是就是常用的SQL优化,比如inseer.group by等常用SQL的优化,会涉及SQL语句内部细节(这正是我缺乏的).最后希望自己能记 ...

  5. mysql优化要点_你需要掌握的 Mysql 优化的一些要点

    本文是学习<高性能 Mysql>中关于 Mysql 中查询优化需要注意的一些要点的总结: Schema 和数据类型优化尽量避免使用 NULL 值,尤其存在索引时,因为如果 NULL 列是索 ...

  6. Mysql 优化(学习笔记二十)

    https://blog.csdn.net/steven_liwen/article/details/53188411 运维角度mysql优化:https://www.cnblogs.com/shen ...

  7. mysql字段简索引_3万字总结,Mysql优化之精髓

    本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降. ...

  8. MySQL优化/面试,看这一篇就够了

    概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计数据库 ...

  9. 史上最全的MySQL优化手册

    MySQL数据库优化大全 (注:文档参考高性能MySQL,SQL手册,官方文档 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 大 ...

最新文章

  1. CV算法复现(分类算法6/6):MobileNet(2017年V1,2018年V2,2019年V3,谷歌)
  2. pip 20.3 新版本发布!即将抛弃 Python 2.x
  3. 无法从“std::_Binder std::_Unforced,SOCKET ,LPSOCKADDR,unsigned int ”转换为“int”
  4. Rust 中的继承与代码复用
  5. 分页及页码导航 用户控件
  6. 部署在IIS服务器的asp.net 网站,禁止访问指定类型文件
  7. 【总结】动态规划 or 组合数学解决棋盘(迷宫)路径问题(持续更新中)
  8. Shell学习笔记 - 运算符
  9. ⭐️ vue项目使用微信表情;vue引入微信表情emoji;vue中使用微信表情包emoji;
  10. uni-app:mescroll-uni 实现上拉加载,下拉刷新
  11. SVN工具使用及常用操作命令总结
  12. 【计算机硬件系统设计(华科)——存储器设计(Logisim 实现)】
  13. 可以指定列fillna吗_京东e卡可以购买指定的京东自营商品?是真的吗
  14. 扎克伯格引领的硅谷“裸捐”风
  15. 使用https请求接口报:javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常的问题处理
  16. 计算机等级考试培训课件,计算机等级考试培训ppt课件
  17. 爬虫实战 | 手把手用Python教你采集可视化知乎问题的回答(内附代码)
  18. STM32智能门锁之调试步进电机
  19. 中国科学院计算机研究所李华,李华-中国科学院大学-UCAS
  20. python批量下载文件教程_超简单超详细python小文件、大文件、批量下载教程

热门文章

  1. Android支付接入(七):Google In-app-Billing
  2. java基础面试题及答案
  3. iOS开发概述-12.手势处理
  4. php检测wifi,WFilter插件 - 随身wifi和私接路由检测
  5. 如何获得免费二级域名?仅需这一步
  6. Android Studio代码迁移问题小汇总
  7. 计算机应用研究所912,中国科学院计算技术研究所硕士生导师章隆兵
  8. 官方精简版!Windows 10 LTSC 2021 正式发布
  9. macOS:给 app 添加摄像头权限
  10. 艺赛旗RPA离线识别普通验证码