数据库表设计三范式:
1、字段原子性,字段不可再分割。
2、消除对主键的部分依赖,某个字段依赖复合主键中的一部分。
3、消除对主键的传递依赖,不能通过其他字段间接依赖于主键。
比如任课老师取决于是什么课,而是什么课又取决于主键id,可以拆分为日程表和任课老师表。

MySQL语句的执行顺序:开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->SELECT子句->ORDER BY子句->LIMIT子句->最终结果
参考:Mysql的那些事儿(部分涉及数据库知识总结)-阿里云开发者社区

字段尽量定义为not null。
金额时,尽量使用整数,以免精度损失。

REPLACE INTO 会先删除,再插入。
INSERT ... ON DUPLICATE KEY UPDATE 更新插入。

聚簇索引 vs 非聚簇索引
聚簇索引的顺序就是数据的物理存储顺序,而非聚簇索引的索引顺序与数据物理排列顺序无关。也就是指索引和数据存放在了一起。(参考:聚簇索引和非聚簇索引的区别_junli_chen的博客-CSDN博客_聚簇索引和非聚簇索引的区别)
聚簇索引的叶子节点存放的是主键值和数据行,支持覆盖索引;二级索引的叶子节点存放的是主键值或指向数据行的指针。
故一张表只能有一个聚簇索引。辅助索引的存在不影响聚簇索引中数据的组织,所以一张表可以有多个辅助索引。
参考:聚簇索引和非聚簇索引_向程序猿进化的博客-CSDN博客_聚簇索引和非聚簇索引
建议使用自增主键,不然影响插入性能,涉及到索引数据移动。
主键不建议修改,会涉及得到索引数据移动。

索引(B+树)
全文索引:搜索时使用,类似es。
普通索引:对关键字没有限制。
唯一索引:要求记录提供的关键字不能重复,可以为null。
主键索引:要求关键字唯一且不为null。
    可以作为外键约束,唯一索引不可以。
        (外键可以为空,外键中列的数目必须和主表的主键中列的数目相同。
        外键中列的数据类型必须和主表主键中对应列的数据类型相同。)
    一张表只能有一个主键索引,而唯一索引未必。
    主键索引是聚簇索引。

索引使用场景:
where、order by、join、
不要用select *,增加索引覆盖的几率。

联合索引
参考:转: SQL中的where条件,在数据库中提取与应用浅析 - 春困秋乏夏打盹 - 博客园

索引使用的语法细节:
1、字段要独立出现。
2、like查询不能以通配符开头。
3、!=、<>、NOT IN、NOT EXIST不使用索引。
4、or的两边条件都要有索引可用。
5、复合索引适用于组合查询。状态值不容易使用到索引。

B(balance)树:B树每个节点都存储数据,所有节点组成这棵树。最好时间复杂度o(1)。
B+树:1、B+树只有叶子节点存储数据,叶节点两两相连,索引有顺序,增加了区间访问性,支持区间范围查询。B树需要中序遍历。
2、由于内节点无 data 域,每页有更多的索引,磁盘IO次数降低了。
时间复杂度固定o(logn)。
参考:一文彻底搞懂MySQL基础:B树和B+树的区别_公众号:码农富哥的博客-CSDN博客_b树和b+树有什么区别

MySQL使用B+树,mongodb、es等使用B树
1、mongodb是文档型,相对于关系型,区间遍历少了。
2、非叶子节点存储数据,单条查询性能提高了。
3、缺少了叶子节点的关联关系,构建索引简单了,使得写的性能提高了。
为什么不使用二叉树红黑树索引?
数据量大时,树的高度太高,磁盘io代价高。二叉树树的高度不均衡,不能自平衡。
为什么不使用哈希索引?
1、适用于等值查询。
2、不适用于区间范围查询以及排序等。
3、全文索引也不支持。
4、没有顺序,大大提升磁盘IO次数。
5、非唯一索引,有大量重复键值时,存在哈希碰撞,效率会很低。

缓存SELECT语句的查询结果:
0:不开启
1:开启,默认缓存所有,需要在SQL语句中增加select sql-no-cache提示来放弃缓存
2:开启,默认都不缓存,需要在SQL语句中增加select sql-cache来主动缓存(常用)

分区算法:
哈希取余,对hash值取余。
range算法,less than分区。
list算法,枚举分区。

分库(1T)分表分区(1kw左右)
分区带来了查询性能的提升,但是写的性能没有变化。
分表的问题
    唯一ID问题
    选择拆分维度
        比如订单表,有订单ID、用户ID、商户ID,如果按照用户ID拆分,如何按照商户ID去查询呢。
        可以做一张商户ID和用户ID的映射表,但是映射表同样有分表的问题,并且有数据同步数据一致性的问题。可以监听binlog同步到映射表。
        或者将2个维度合并为一个维度做拆分,前几位是用户ID,后几位是商户ID。
    JOIN查询不能使用了
        拆成多个单表查询,本地做JOIN。
        宽表,重写轻读,做一张join的表,定时同步。还可以使用es。
分库额外又引入了事务的问题,需要引入分布式事务解决。
参考:分库分表分区需要考虑的问题及方案 - 南哥的天下 - 博客园

主从部署时,如何做到读写分离?
使用Spring AOP,调用DAO接口时根据接口方法命名规范(增addXXX/createXXX、删deleteXX/removeXXX、改updateXXXX、查selectXX/findXXX/getXX/queryXXX)动态地选择数据源(写数据源对应连接master而读数据源对应连接slave),那么就可以做到读写分离了。

PrepareStatement接口继承自Statement接口。
PrepareStatement使用占位符,预编译,效率更高。
PrepareStatement能够防止SQL注入,安全性更好。
PrepareStatement可读性可维护性更好。

全文参考:超,超,超级全面的MySQL优化面试解析!!!(转自大神)_冬子一定要努力的博客-CSDN博客_神key一般不易过期

插入100条数据,然后又删除后面的90条数据,重启mysql,如果是innodb,自增ID会从11开始,如果是MyISAM,自增ID从101开始,因为innodb的自增ID在内存中。

MySQL知识点总结相关推荐

  1. mysql知识点系列-数据目录(Data目录)下文件类型一窥究竟

    本文主要基于<高性能MySQL> 文章目录 1.数据库目录 2.frm文件 3.ibd文件 4.ibdata文件 5.ib_logfile文件 6.UNDO日志 7.慢查询日志 8.二进制 ...

  2. mysql知识点回顾(一)

    回顾mysql中的常用知识点 上图为win版本启动关闭服务方式. 连接mysql命令:mysql -u alex -p 查看所有数据库:show databases; use db_name ;切换数 ...

  3. 面试必会系列 - 2.1 MySQL知识点大汇总(基本架构,存储引擎,锁,事务,索引,B+树等等)

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  4. MySQL知识点整理汇总

    文章目录 前言 一.数据库与SQL 1. 数据库与数据库管理系统 2. 关系数据库 3. MySQL语句的种类 4. MySQL语句的基本书写规则 二.MySQL语句的两大顺序 1. MySQL 语句 ...

  5. 这应该是最全面的MySQL知识点总结啦

    书籍推荐 <SQL基础教程(第2版)> (入门级) <高性能MySQL : 第3版> (进阶) 常见问题总结 存储引擎 一些常用命令 查看MySQL提供的所有存储引擎 mysq ...

  6. Mysql 知识点总结(持续更新)

    挺长一段时间没有动手写博客了,接下来的一段时间将对前段时间学的mysql做一次总结,内容比较多,将持续更新上来,贵在坚持啊~ 关于mysql的,这里不多说,看图说话: 上面的图是最新的统计情况,mys ...

  7. MySQL知识点复习

    MYSQL学习 安装:sudo apt install mysql-server https://blog.csdn.net/qq_38505969/article/details/109957055 ...

  8. 【mysql知识点】查看和修改系统参数

    如何查看和修改系统参数? 在MySQL里,参数也可以叫变量(Variables),一般配置文件为:/etc/my.cnf.当MySQL实例启动时,MySQL会先去读一个配置参数文件,用来寻找数据库的各 ...

  9. mysql知识点概览_MySQL 基本架构概览

    下图是 MySQL 的一个简要架构图,从下图可以清晰的看到 SQL 语句在 MySQL 内部是如何执行的. 先简单介绍下图涉及的一些组件的基本作用,后面还会详细介绍到这些组件的作用. 连接器: 身份认 ...

  10. mysql知识点汇总

    1. 数据库的安装 2. 数据库设计需要注意什么 3. SQL语句优化 4. 怎样处理慢查询? 5. 怎样更好的利用数据库索引? 6. 事务隔离级别有哪些?怎么实现的? 7. 数据库锁有哪些? 8. ...

最新文章

  1. 我们究竟还要学习哪些Android知识?专题解析
  2. 云通讯平台:为更多游戏玩家解放双手
  3. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下
  4. CPU为什么是方形而不是圆形的?
  5. Xenix 操作系统的简史
  6. [react] 在react中你是怎么进行状态管理的?
  7. 什么方式可以通过影子系统传播恶意代码_将恶意代码隐藏在图像中:揭秘恶意软件使用的隐写术...
  8. 海德堡大学 BMCV 组(Master/Diploma/Bachelor)研究机会,生物医学图像分析方向
  9. async python_Async Python 竟不比sync Python 快,怎么回事?
  10. 熊猫Pivot_table()– DataFrame数据分析
  11. 关于中断和异常的几点认识
  12. element-ui局部区域loading效果
  13. Django-创建一个完整的项目-详细教程
  14. Extjs的grid总计实现
  15. autojs版本的QQ聊天自动回复机器人源码免费分享,不需要root权限
  16. 用命令如何返回上级目录
  17. 【建站笔记】:在wordpress博客文章中插入代码段并高亮显示
  18. TPshop电商平台购物车自动化测试
  19. clip studio paint插件开发之介绍
  20. Linux服务器上的mongodb:/lib64/libc.so.6: version `GLIBC_2.14‘ not found (required by /app/hems/mong)

热门文章

  1. Java String的API方法总结
  2. 基于Java+springmvc+mysql+jquery实现企业员工管理系统
  3. 怎么排除maven依赖
  4. 非期望产出的sbm模型_KANO模型:产品人必懂的需求分析法
  5. python多元线性回归mlr 校正_多元线性回归分析(multiple regression)原理及举例
  6. Rail 3流行插件与替换部件简介
  7. 工业机器人负载设置 (KUKA)
  8. TMS320C6678开发板( DSP+Zynq )RTOS综合功能案例,嵌入式必看!
  9. zoomeye爬取前二十页ip+port记录
  10. STM32理论 —— 看门狗