首页 > 数据库 >Mysql索引底层数据结构与算法、Explain

Mysql索引底层数据结构与算法、Explain

时间:2023-03-26 22:56:54浏览次数:44  
标签:Explain mysql 查询 索引 explain Mysql 数据结构 主键 select

为什么建议InnoDB表必须建主键?并且推荐使用整型的自增主键?

如果不由我们人工去创建主键,mysql也会帮我们去建立主键,没有必要把这么简单地工作交给Mysql。
整型比较比UUID比较要快,而且更加节省空间。

设置自增有一个考虑就是在插入元素数据的时候由于需要维护一颗B+树,这颗树根据主键排序的,为了维护树平衡,需要一定的时间开销,设置主键自增之后,直接往后面追加元素即可,减少了时间开销。

为什么非主键索引结构叶子节点存储的是主键值?

为了一致性和节省存储空间。

explain extended 可以多展示哪些字段?

filtered,这个和mysql版本有关,有的mysql版本不加extended关键字,也可以展示这个字段。

这是一个半分比的值, rows * filtered / 100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 expalin 中的id值比当前表id值小的表)。

explain partitions可以多展示哪些字段?

partitions, 如果查询基于分区表的话,会显示查询将访问的分区。

怎么查看mysql帮我们做了哪些优化?

在执行完了explain之后,可以使用sho warnings语句查看mysql帮我们执行哪些优化。

explain select_type列的含义?

select_type 表示对应简单还是复杂查询。

1)simple:简单查询,查询不包含子查询和union

2)primary:复杂查询中最外层的select

3)subquery:包含在select中的子查询(不在from 子句中)

4)derived:包含在from子句中的子查询。MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义)

5)union:在union中的第二个和随后的select

explain typ列有什么含义?

这一列表示关联类型,即MySQL决定如何查找表中的行,查找数据记录的最大范围。

依次从最优到最差分别为:system > const > eq_ref > ref > range > index > ALL。

一般来说,得保证查询达到range级别,最好达到ref。

NULL: mysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如: 在索引列中选取最小值,可以单独查找索引来完成,不需要在执行时访问表。

const, system; myq能对查询的某部分进行优化并将其转化成一个常量(可以看show wanings 的结果)。用于 primary key 或 unique key 的有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快。system是const的特例,表里只有一条元组匹配时为system。

eq_ref: primary key 或 unique key 索的所有部分被连接使用,最多只会返回一条符合条件的记录。这可能是在 onst 之外最好的联接类型了简单的 select 查询不会出现这种 type。

ref:相比 e r,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行.

 

标签:Explain,mysql,查询,索引,explain,Mysql,数据结构,主键,select
From: https://www.cnblogs.com/zhf123/p/17259853.html

相关文章

  • 终端启动MYSQL时出现报错:“ERROR 2003 (HY000): Can't connect to MySQL server on 'l
    1.问题说明一直使用:mysql-uroot-p启动mysql数据库,使用是正常的,突然一天启动时候报错:“ERROR2003(HY000):Can’tconnecttoMySQLserveron‘localhost’(1006......
  • mysql中DATADIFF()函数使用
    用过mssql的朋友应该了解datediff函数了,在mssql中,该函数的第一个参数是开始日期,第二个是结束日期,开始日期应该在结束日期之前,这样算出来的结果是大于或等于0的一个数,反之......
  • 简单数据结构做题记录
    CF526FPuddingMonsters典题,发现这本质上是一个一维问题,一个区间合法当且仅当\(\max-\min=r-l\),枚举右端点维护左端点的变化量,用两个单调栈维护到\(r\)的最大最......
  • Python实例讲解 -- 操作数据库 附mysqldb win32 py2.7下载
    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法。python操作数据库需要安装一个第三方的模块,在http://mysq......
  • mysql jdbc 通过SSH Tunnel连接MySQL数据库
    1.pom.xml参考JDBC通过SSHTunnel连接MySQL数据库<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifa......
  • Mysql主从复制
    一、主从复制1、主从复制作用主从复制:主设备通过二进制日志传输到从设备,从设备通过二进制日志和主同步数据。作用:负载均衡读操作,备份(实时备份,不能替换手动的备份),高可......
  • 搭建主备MySQL
    拉取镜像dockerpullmysql:5.7创建主备容器dockerrun-itd--namemysql-master--cpu-period=1000000--cpu-quota=500000--memory512M--rm-eMYSQL_ROOT_PASSWO......
  • Mysql--底层结构、Redolog/Undolog/Binlog详解与区别、通过Binlog恢复数据、主从复制
    一、MySQL底层执行原理详解MySQL的内部组件结构大体来说,MySQL可以分为Server层和存储引擎层两部分。1、Server层主要包括连接器、查询缓存、分析器、优化器、执行器等,涵......
  • MySQL主从复制架构
    MySQL主从复制架构一、MySQL集群概述1、集群的主要类型高可用集群(HighAvailableCluster,HACluster)高可用集群是指通过特殊的软件把独立的服务器连接起来,组成一个能够提供......
  • MySQL 基础
    基础入门MySQL数据库三大范式为了建立冗余较小,结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就成为范式。a.第一范式确保每列......