温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySql慢查询如何解决

发布时间:2021-12-04 14:18:01 来源:亿速云 阅读:107 作者:iii 栏目:大数据

本篇内容介绍了“MySql慢查询如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  1. 主键id,我们采用bigint,8字节

  2. 一条数据大小1KB

  • 第一层
    一个页16K,每一个索引键的大小8字节(bigint)+6字节(指针大小),因此第一层可存储16*1024/14=1170个索引键。查询Mysql的叶子可以存放多少数据,可以用sql: SHOW GLOBAL STATUS LIKE 'Innodb_page_size',大约是16k


  • 第二层
    第二层只存储索引键,能存储多少个索引键呢?1170(这么多个页,有第一层延伸的指针)1170(每页的索引键个数,跟第一步计算一致)=1368900
    如果第二层存储数据呢?1170(这么多个页,有第一层延伸的指针)
    16(16KB的页大小/1KB的数据大小)=18720,也就是能存储一万多条数。


  • 第三层
    直接看三层能存储多少数据?1170*1170*16=21902400,是不是很强大,此处应该有掌声和鲜花,3次IO就可以查询到2千多万左右的数据,也就是这么大的数据量如果通过主键索引来查找是很快,这就是explain一个sql时,type=const为什么性能是最优的。

从上面我们可以看出,查出两千万左右的数据,我们需要了3次磁盘IO,如果采用其他的结构,很明显不是3次磁盘IO。

2.  MyISAM 存储引擎介绍(非聚簇索引)

特点:索引文件和数据文件是分离的

缺陷:不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。

它是表的存储引擎,例如如下创建表的语句,就指定的存储引擎,

CREATE TABLE `user` ( 

  `id` INT(64) DEFAULT NULL 

) ENGINE=MYISAM DEFAULT CHARSET=utf8

3. InnoDB 存储引擎介绍(聚簇索引)

特点:1. 表数据文件本身就是按B+ Tree组织的一个索引结构文件

          2. 聚簇索引-叶节点包含完整的数据记录

下面有一个问题:

1.  为什么InnoDB表必须有主键,并且推荐使用整形的自增主键

InnoDB是通过主键聚集数据,如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB会隐式定义一个主键来作为聚簇索引。

使用自增主键,可以让二叉树分裂的时候,达到一个小平衡,效率更高。

“MySql慢查询如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI