本篇内容介绍了“MySql慢查询如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
主键id,我们采用bigint,8字节
一条数据大小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慢查询如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。