聊聊mysql

记录那些坑
本文会持续更新,陆续更新有关mysql技术内幕、实战优化、面试技巧。


前言

重中之重的MySql数据库

mysql数据库不仅在工作中经常使用,面试中也是必问的内容。本文主要内容参考“mysql技术内幕”一书。


提示:以下是本篇文章正文内容,下面案例可供参考

索引

数据库要想查的快,索引得利用好。
数据库要想入的快,索引太多可不好。
mysql中索引类型有:BTree,Full Text,Hash,RTree。

BTree之聚集索引

聚集索引:ID索引
ID索引使用BTree结构,每个表仅且只有一个!!!,(即使没有创建主键,mysql会默认创建一个隐藏列作为ID索引)
BTree高度:
BTree中节点存储键值和地址指针,叶子结点存储键值、指针、数据。
物理上不一定是顺序的,逻辑上是顺序的(通过指针链接)。
在这里插入图片描述

BTree之辅助索引

辅助索引就是主键以外的 单个字段的BTree索引类型的了。
辅助索引 叶子结点书签:聚集索引键。
当通过辅助索引来寻找数据时,InnoDB存储引擎会遍历辅助索引并通过叶级别的指针获得指向主键索引的主键,然后再通过主键索引来找到一个完整的行记录。
在这里插入图片描述

BTree之联合索引

将多个字段联合一起做索引,索引结构如下:
在这里插入图片描述
根据图示需要清楚,键值是个多元组,多元组中是按照字段的顺序进行排列的。所以,在进行查询时,如果没有按照自从向右的字段查询,就会打破联合索引,使之失效!!!

注意:如果创建联合索引(a,b,c);如果查询a和b order by c ,就可以使用到联合索引; 如果查询a 直接order by c,就不会使用到索引,因为(a,c)并没有排序

BTree之覆盖索引

覆盖索引常见的场景为:直接使用索引查询出索引键值、主键的内容,根据索引的字段进行范围或非范围的统计。
判断是否为覆盖索引,使用explain,查看Extra字段,如果为Using index,就表示走了。
案例:(t表,a为主键,c为辅助索引,cd为联合索引,b无索引)

  • explain SELECT a from t where c = 1 ; 为覆盖索引
  • explain SELECT count(*) from t ; 为覆盖索引
  • explain SELECT count(b) from t ; 全表扫描
  • explain SELECT count(b) from t where c >10 ; 非覆盖索引,先走c的辅助索引然后走主键索引。
  • explain SELECT count(*) from t where d > 0 and d<10 ; 为覆盖索引

使用到的工具

1、py_innodb_page_info工具

首先 git 下载 https://gitee.com/andy_yyf/py_innodb_page_info

clone到合适位置。

本地需要有python2 (一般服务器自带)

执行命令:python py_innodb_page_info.py /{对应的path}/t.ibd -v

2、hexdump工具

在Windows操作系统下,可以选择通过程序UltraEdit打开该二进制文件。在Linux环境下,使用命令hexdump-C-v mytest.ibd>mytest.txt。这里将结果重定向到了文件mytest.txt,打开mytest.txt文件,找到如下内容:xxxx

总结

提示:

本文仅仅简单说明了有关mysql相关内容,如深入理解可读相关层面的书籍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

航迹者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值