MySQL底层了解

MySQL性能调优
一、索引重要性
索引是用来快速检索出具有特定值的记录
Mysql官方对索引的定义为: 索引(Index)是帮助Mysql高效获取数据的数据结构
本质: 数据结构
作用: 快速检索

MySQL : 关系型数据库 需要持久化 到磁盘文件 使用 IO (磁盘IO:物理文件的读取速度 和网络IO:网络的传输速度)
SQL查询需要去通过 IO 访问持久化文件 当减少磁盘的IO(加快IO对磁盘的读取速度),就是相当于提高数据库的查询效率(提高效率)

二、索引底层实现
判断一个算法性能是否高效,跟该算法的时间复杂度(描述一个算法在问题规模不断增大时对应的时间增长曲线) 非常有关系
Hash哈希散列算法
哈希算法(也叫 散列) : 就时把任意长度(Key)通过散列算法变化出固定长度的Key地址,通过这个地址进行访问对应的值,它通过把关键码字映射到表中一个位置来访问记录,以加快查询速度。这个映射函数叫做散列函数,存放记录的数组叫散列表。
优点: 时间复杂度: O(1) 效率非常高
缺点:无法使用范围查询 排序 分页

Hash算法图:

二叉树: 查询秘诀:左中右 小中大 对数据的查询次数 为 该数据的 父节点的个数+1
真实的数据存在于叶子节点;非叶子节点值不存储真实的数据,只存储指引搜索方向的数据项。
优点:查询速度 较快
缺点:有平衡性的问题
MySql有自增的问题 所以会形成倾斜的二叉树 并不能提高查询效率

红黑树( AVL TREE)
优点:能够解决二叉树的平衡性问题
缺点: 当进行自增时还会一直向右倾斜 数据量大后 深度会很深
B Tree (Balance)

B+ 树
真实的数据存在于叶子节点;非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项。
该数据模型在添加时 只会向右添加宽度 并不会增加深度
在添加时能够进行有序的添加 查询时能够进行范围查询
Max.Degree:分层最大值

算法模型:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

三、Mysql索引存储
mysql引擎分类:
MyISAM引擎( 非聚集索引方式)
MyISAM是MySQL的默认数据库引擎(5.5版本前),由早期的ISAM(indexed Sequential Access Method 索引顺序访问方法)所改良。虽然性能极佳,但是有一个缺点:不支持事务处理(transaction);
INNODB引擎( 聚集索引方式)
INNODB,是MySQL的数据库引擎之一,为MySQL AB 发布 binary 的标准之一。由 Innobase Oy公司开发,2006年被甲骨文公司收购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。

四、索引底层存储逻辑
存储引擎不是针对于数据库而是针于数据库中的表
DLL: 创建表的语句
CREATE TABLE admin (
id varchar(50) NOT NULL,
name varchar(50) DEFAULT NULL,
PRIMARY KEY (id)
)
#存储引擎
ENGINE=InnoDB DEFAULT CHARSET=utf8;

MyISAM:
不支持事务 本地两个文件 无法保持数据的一致性
Mysql > 关系型数据库 > 持久化 > 磁盘文件 > 磁盘IO
.frm: 创建表的语句 (DLL)
.MYD : 表的数据文件
.MYI : 表的索引文件
INNODB:
占用磁盘空间更大 需要读取的时间更长
.frm : 创建表的语句 (DLL)
.ibd : 表的数据内容和索引文件
MyISAM
索引允许重复
索引存储地址 对应 MYD数据文件的值

INNODB 索引直接存储值 以其他列为索引时 会以主键的值为索引的值
InnoDB默认创建主键索引 避免数据冗余

五、京东实战
查询语句:select id,company_name from company_name like CONCAT(‘%‘,?,’%’) limit 0,10
通过前缀 EXPLAIN 关键字 加上所执行的 SQL语句 会得出一个该条SQL的查询结果
type: ALL 代表全表扫描
type: index 索引查询
当查询数据过多

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值