Mysql优化原理分析

这篇具有很好参考价值的文章主要介绍了Mysql优化原理分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、存储引擎

1.1 MyISAM

一张表生成三个文件

  • xxx.frm:存储表结构
  • xxx.MYD:存储表数据
  • xxx.MYI:存储表索引

索引文件和数据文件是分离的(非聚集)

Mysql优化原理分析,mysql,哈希算法,数据库

select * from t where t.col1 = 30;

先去t.MYI文件查找30对应的索引所在磁盘文件地址,去t.MYD文件找出对应磁盘文件地址的数据

1.2 Innodb 

一张表生成两个文件

  • xxx.frm:存储表结构
  • xxx.ibd:存储索引和数据

索引和数据(索引行对应的所有列数据)不是分离的(聚集) 

Mysql优化原理分析,mysql,哈希算法,数据库

二、索引

索引是帮助MySQL高效获取数据的排好序数据结构

2.1 索引数据结构 

  • 数组 

等值查询需要一个一个去匹配,效率不高。

不适合范围查找、排序、统计、模糊查询等常见操作。

数组的通病:插入和删除性能差。

  • 二叉查找树 

大数据情况下,树的层级很深,性能差。

最坏的情况可能退化成链表,查询效率更差。

不适合范围查找、排序、统计、模糊查询的常见操作。

不适合频繁的插入和删除。

  • 二叉平衡树

Mysql优化原理分析,mysql,哈希算法,数据库

 

大数据情况下,树的层级很深,性能差。

不适合范围查找、排序、统计、模糊查询的常见操作。

不适合频繁的插入和删除。

  • 红黑树

与二叉平衡树一样。

  • Hash表 

对索引的key进行一次hash计算就可以定位出数据存储的位置,多用于MEMORY存储引擎。

等值查询效率高(=,IN),不能排序,不能进行范围查询,hash冲突问题。

Mysql优化原理分析,mysql,哈希算法,数据库

  • B-Tree

节点具有相同的深度,页节点的指针为空

所有索引元素不重复

节点中的数据所有从左到右递增排列

数据有序,范围查询

Mysql优化原理分析,mysql,哈希算法,数据库

  •  B+Tree(B-Tree变种)

非页子节点不存储data,只存储索引(冗余),可以放更多的索引

页子节点包含所有的索引字段

页子节点用指针(双向指针)连接,提高区间访问的性能

MySQL加载的时候,一二层叶子数据(冗余索引)加载在内存中,底层叶子数据存储在磁盘 

Mysql优化原理分析,mysql,哈希算法,数据库

Mysql优化原理分析,mysql,哈希算法,数据库

数据页是Innodb内部存储数据的基本单位,默认16K:show variables like 'innodb_page_size'。

在计算机中,磁盘存储数据最小单位是扇区,一个扇区的大小是512B。

文件系统中,最小单位是块,一个块大小就是4K。

Innodb一颗B+树可以存储多少行数据?

假设B+树的高度为2的话,即有一个根节点和若干叶子节点。

这颗B+树存储的总记录数=根节点指针数*单个叶子节点记录行数

根节点可以存储多少指针?

我们假设主键ID为bigint类型,长度为8字节,而Innodb源码中指针大小设置为6字节,指针大小:8+6=14字节。根节点存储指针数:16K/14B=1170。

叶子节点中每个数据页可以存储多少行记录?

如果一行记录的数据大小为1K,那么单个叶子节点可以存储的记录数:16K/1K=16。

因此,一颗高度为2的B+数,能存储记录数:1170*16=18720。

同理一颗高度为3的B+树,存储记录数:1170*1170*16=21902400。

总结:B+树高度为1-3层,已经满足千万级别的数据存储。

 2.2 联合索引

Mysql优化原理分析,mysql,哈希算法,数据库

-- 根据最左匹配原则不会走索引
select * from t_employees where age=30 and position='dev';
-- 先根据索引获取索引对应记录的主键,然后根据主键回表获取主键对应的数据记录
select * from t_employees where name='Bill' and age=30 and position='dev';

2.3 索引下推

索引下推(Index Condition Pushdown,简称ICP)是MySQL 5.6引入的一种索引优化技术,它可以在索引遍历过程中,对索引字段先判断,过滤掉不符合条件的记录后再回表,可以有效的减少回表的次数。

当一条SQL使用了索引下推之后,在explain执行计划中,Extra列中出现Using index condition的信息。

explain select * from t_employees where name='Bill' and age=30 and position='dev';

Mysql优化原理分析,mysql,哈希算法,数据库文章来源地址https://www.toymoban.com/news/detail-685701.html

到了这里,关于Mysql优化原理分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库——MySQL优化服务器,提高MySQL的运行速度!

    MySQL是一种广泛使用的关系型数据库管理系统,优化MySQL服务器可以显著提高数据库的性能和运行速度。在下面的回答中,我将介绍一些常见的MySQL优化策略和技术,以帮助提高MySQL服务器的性能。 1、优化数据库设计: 正确设计数据库结构,使用适当的数据类型、索引和约束

    2024年02月07日
    浏览(69)
  • Mysql数据库结构优化汇总

         设计表以最大限度地减少其在磁盘上的空间。这可以减少写入磁盘和从磁盘读取的数据量,从而带来巨大的改进。较小的表通常需要较少的主内存,而它们的内容在查询执行过程中被主动处理。表数据的任何空间减少也会导致更小的索引可以更快地处理。 尽可能使用最

    2024年02月07日
    浏览(49)
  • 【MySQL 数据库】7、SQL 优化

    ① 批量插入数据 ② 手动控制事务 ③ 主键顺序插入,性能要高于乱序插入 主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3 主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 【☆】 】 ① 如果需要一次性插入大批量数据(百万级别),使用 insert 语句插入性能 很低 ② 可使用 MySQL 数据库提供的 loa

    2024年02月08日
    浏览(60)
  • MySQL数据库的优化技术二

    纵论 对mysql优化时一个综合性的技术,主要包括  表的设计合理化(符合3NF) 添加适当索引(index)  [ 四种: 普通索引、主键索引、唯一索引unique、全文索引 ] 分表技术( 水平分割、垂直分割 ) 水平分割根据一个标准重复定义几个字段值相同,表名称不同的表,表的结构相同 读(

    2024年02月11日
    浏览(38)
  • MySQL数据库性能优化技巧介绍

    MySQL是目前最流行和广泛使用的开源关系型数据库之一,随着数据量的增长和访问负载的提高,优化数据库性能变得至关重要,以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧,提高数据库的运行效率,提升系统性能。 对于MySQL,最简单

    2024年02月08日
    浏览(134)
  • MYSQL数据库故障排除与优化

    目录 MySQL 单实例故障排查 MySQL 主从故障排查 MySQL 优化 故障现象 1 ERROR    2002    (HY000):    Can\\\'t    connect    to    local    MySQL    server    through    socket \\\'/data/mysql/mysql.sock\\\' (2) 问题分析:以上这种情况一般都是数据库未启动或者数据库端口被防火墙拦截导致。 解

    2024年04月11日
    浏览(41)
  • MySQL数据库进行性能优化的思路

    对MySQL数据库进行性能优化的思路可以涵盖以下方面: 索引优化: 索引是提高查询性能的关键。确保表中的关键列和经常用于查询条件的列都被适当地创建了索引。可以使用 CREATE INDEX 语句添加索引,或者使用 ALTER TABLE 语句在已有表上添加索引。例如,对于一个用户表中的

    2024年02月06日
    浏览(55)
  • 数据库——MySQL高性能优化规范

    所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 MySQL 保留(如果表名中包含查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符 临时库表必须以 tmp_为前缀并以日期为后缀,

    2024年02月11日
    浏览(104)
  • 数据库系统原理及MySQL应用教程实验四MySQL数据库表数据的查询操作

    1.掌握SELECT 语句的基本语法格式。 2.掌握SELECT 语句的执行方法。 3.掌握SELECT 语句的 GROUP BY 和 ORDER BY 子句的作用。 验证性实验:在公司的部门员工管理数据库的bumen表和yuangong表上进行信息查询。 设计性试验:将在student表和score表上进行查询。 ( 一 ) 验证性实验 在

    2024年02月05日
    浏览(57)
  • MySQL——性能优化与关系型数据库

    吞吐与延迟:有些结论是反直觉的,指导我们关注什么。 没有量化就没有改进:监控与度量指标,指导我们怎么去入手。 80/20原则:先优化性能瓶颈问题,指导我们如何去优化。 过早的优化是万恶之源:指导我们要选择优化的时机。 脱离场景谈性能都是耍流氓:指导我们对

    2024年02月01日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包