Mysql学习总结

mysql所以为什么是B+树?

索引数据结构:

  1. 二叉搜索树
    如果用二叉搜索树作为索引结构,当插入一个自增的列时,就变成链表了(因为插入比根节点小的数会放到左节点,比根节点大的数在右节点),这样查询的复杂度还是O(n),还额外增加索引的存储空间

  2. 红黑树(二叉平衡树)
    当一边过高时,红黑树会自动平衡高度,磁盘IO次数比二叉搜索树少一半。缺点:真实场景中数据量庞大,树的高度很高,如果数据在叶子节点,查询性能很低

思考:我们希望树的高度低一点,比如h≤4,那么最多查四次即可。可以让一个索引节点存储空间大一点,有更多的分叉,树的高度就越小

  1. B树
  • 叶子节点具有相同的深度,叶节点指针为空
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增排列
    4. B+树
  • 非叶子节点不存储data, 只存储索引,可以放更多索引
  • 叶子节点包含所有索引字段
  • 叶子节点用指针连接,提高区间访问的性能

聚集索引和非聚集索引

聚集索引:数据都在叶子节点上
非聚集索引:与之相反

为什么建议InnoDB必须建主键,并且推荐使用整形的自增主键?

为什么主键:底层B+树需要根据主键来维护索引记录,mysql会在后台自动维护一个隐藏列(row_id),在有效性的角度,我们自己来建一个这样的列比较好,这样就不用mysql去做了,提升效率

事务的隔离级别?带来的问题?如何解决?

  • 读未提交。当前事务能看到其他事务未提交的数据,有脏读,不可重复读,幻读问题。
  • 读已提交。一个事务开始时,只能看见已提交事务所做的改变。解决了脏读,但有不可重复读,幻读的问题。

不可重复读:事务B在事务A的两次查询语句之间进行了修改并提交,A两次查询的内容就不一样了

  • 可重复读。保证同一事物的多个实例在并发读取事务时,会看到同样的数据行。解决了不可重复读的问题,但有幻读问题
  • 可串行化。强制事务排序,使之不可能产生冲突
    MVCC解决幻读问题

事务的四大特性

都用转账来举例

  • 原子性(atomicity)

    指事务是一个不可分割的单位,要么全部提交,要么全部失败回滚,不存在中间的状态(想象成物理世界的最小单位-原子)如果没有原子性,就会发生数据不一致的情形,比如A账户转账100元,B增加100元失败,则无故丢失100元

  • 一致性(consistency)

    事务执行前后,数据从一个合法状态变换到另一个合法性状态,合法的数据状态指的是满足预定的约束的状态

    举例1:A有200元,转300出去,剩-100,如果定义了状态:余额≥0,则此时不满足一致性

    举例2:A有200元,转50给B,A剩150,B增加失败,此时如果我们限制A和B的总和应当不变,则不满足一致性。

  • 隔离性

    一个事务的执行不被其他事务干扰,即一个事务的内部操作及使用的数据对并发的其他事务时隔离的,并大执行的各个事务之间不能相互干扰

  • 持久性

    事务一旦被提交,对数据库的改变是永久性的,通过事务日志来保障的

    总结:原子性是基础,隔离性是手段,一致性是约束条件,持久性是目的

数据库索引

什么是索引?

索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B+树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

数据库索引类型有哪几种?

主键索引:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。每个表只能有一个主键。
唯一索引;这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。主键一定是唯一索引,唯一索引不一定是主键
普通索引:这是最基本的索引类型,而且它没有唯一性之类的限制
全文索引:全文索引技术是搜索引擎的关键技术
组合索引;

按数据结构分:

BTree索引;
B+Tree索引;
哈希索引;
全文索引;

主键和索引的区别?

索引的区别以及应用场景?

为什么elastic search比mysql全文索引更适合?

待更新

Mysql个人学习总结相关推荐

  1. linux数据库创建score表,MySQL数据库学习笔记

    MySQL数据库学习笔记phpma (实验环境:Redhat9.0,MySQL3.23.54) 纲要: 一,连接MySQL phpma 二,MySQL管理与授权 三,数据库简单操作 四, 数据库备份 ...

  2. php mysql 学习,php+mysql完全学习手册源码

    [实例简介] <php+mysql完全学习手册>(黄桂金.于永军)源码 [实例截图] [核心代码] b82c182d-8fbd-4888-854f-5dc80db47e47 └── php ...

  3. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. mysql 触发器学习

    mysql 触发器学习 1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_ ...

  5. MySQL服务器学习笔记!(二) ——数据库各项操作

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://foreveryan.blog.51cto.com/3508502/657640 ...

  6. mysql 数据库学习(触发器)

    引用:http://bbs.mysql.cn/thread-9135-1-2.html 引用:21. 触发程序 create table a (sa int); create table b (sb ...

  7. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. nodejs的mysql模块_Nodejs的mysql模块学习(一)

    介绍 mysql npm包 是一个nodejs的模块,由JavaScript编写 安装 npm install mysql 建立连接 var mysql = require('mysql');//引用 ...

  9. Docker Mysql使用学习

    Docker & Mysql使用学习 学习环境 学习目标 学习实现 1.运行mysql镜像 2.本地连接数据库 3.远程连接数据库 4.应用容器与mysql容器交互 学习环境 Centos7 ...

  10. MySQL 索引学习笔记

    MySQL 索引学习笔记 索引基本概念 索引优点 B-Tree 索引 基本原理 使用场景 使用限制 哈希索引 基本原理 使用限制 自适应哈希索引 处理哈希冲突 相关面试题 高性能索引策略 独立的列 前 ...

最新文章

  1. ES6新增特性——Promise
  2. Py之gym:gym的简介、安装、使用方法之详细攻略
  3. ABP从入门到精通(1):aspnet-zero-core项目启动及各项目源码说明
  4. Eclipse中classpath和deploy assembly的文件位置
  5. 用python做采集时相对路径转换成绝对路径
  6. PerfMa“寒泉子”李嘉鹏:成长和创业都要能人所不能,真强者何惧资本寒冬
  7. openwrt+php+not+found,openwrt路由翻车,等高手
  8. 清除stoped impdp/expdp job的方法
  9. 博文视点大讲堂 37 期——It's Android Time :程序员创富有道!圆满结束
  10. crmeb java单商户源码java二开文档部署文档H5商城部署文档【5】
  11. c语言的算法必须要有输入输出,多选题: 1、计算机算法必须具备输入、输出和________等特性...
  12. October CMS - 快速入门 2 基本概念
  13. 职场沟通10个小技巧 让你迅速融入团队
  14. 一个遮罩层怎么遮罩两个图层_遮罩动画需要用两个图层,一个是遮罩层,另一个是()层...
  15. java 实现dns劫持_什么是HTTP劫持和DNS劫持
  16. 批量下载网页图片,python只需23行代码
  17. Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构
  18. 梯度是什么?图像梯度又怎么理解?
  19. 将 top命令执行结果输出到文件
  20. springboot学习网址汇总

热门文章

  1. XXL-JOB漏洞解决,Eclipse Jetty HTTP请求走私漏洞
  2. 如何调用Sphinx
  3. CodeFroces gym 100781 A.Adjoin the Networks(贪心)
  4. 惠普服务器如何插内存
  5. 求一个点到任意两个点所在直线距离 C#代码公式
  6. otl c mysql_OTL
  7. 杰出人士的七种共性之7-独孤求败
  8. CORTEX:我知道你在真笑还是假笑 | 前辅助运动区的激活与对笑声传染性和真实性的感知
  9. 阅读材料:信息技术年谱
  10. 华为紧盯Android专利战: 置身事外几无可能