mysql数据库基础知识 讲解mysql数据库建表的完整步骤

摘要今天主要讲一下mysql数据库引擎的一些概念和mysql数据库的本质,用一句话概括:文件夹-文件:数据库实际上是一个新文件夹,数据库中的表是文件夹中的一个或多个文件(取决于数据库引擎,MyISAM是3,InnoDB是2.5)Mysql的数据库实际上是存储在MySQLdata下的一个文件夹。数据库...

摘要

今天主要讲一下mysql数据库引擎的一些概念和mysql数据库的本质,用一句话概括:

文件夹-文件:数据库实际上是一个新文件夹,数据库中的表是文件夹中的一个或多个文件(取决于数据库引擎,MyISAM是3,InnoDB是2.5)

Mysql的数据库实际上是存储在MySQLdata下的一个文件夹。

数据库中的表是文件夹中的一个或多个文件(取决于数据库引擎)。

一、为什么要合理选择数据库存储引擎?

Oracle、SQL Server等数据库只有一个存储引擎,所有的数据存储管理机制都是一样的。MySql数据库提供了多种存储引擎。

MySQL中的数据通过各种技术存储在文件(或内存)中。这些技术中的每一种都使用不同的存储机制、索引技术、锁定级别,并最终提供各种不同的功能和能力。通过选择不同的技术,您可以获得额外的速度或功能,从而提高应用程序的整体功能。

这些不同的技术和相关的功能在MySQL中被称为存储引擎(也称为表类型)。MySQL默认配置了很多不同的存储引擎,可以提前设置,也可以在MySQL服务器中启用。您可以选择适用于服务器、数据库和表的存储引擎,以便在选择如何存储信息、如何检索信息以及您需要数据结合哪些性能和功能时,为您提供最大的灵活性。

第二,myisam表引擎存储

1。myisam的存储结构

每个表有三个文件,它们都位于数据库目录中。

tb_name.frm 表结构定义tb_name.MYD 表数据tb_name.MYI 表索引

2,myisam索引结构

MyISAM引擎使用B+树作为索引结构,叶子节点的数据域存储数据记录的地址。下图是MyISAM索引的示意图:

让我们假设这个表中有三列。假设我们把Col1作为主键,上图就是MyISAM表的一个主键。可以看出,MyISAM的索引文件只存储数据记录的地址。在MyISAM中,主索引和辅键在结构上没有区别,只是主索引要求键是唯一的,而辅索引键可以重复。如果我们在Col2上建立一个二级索引,这个索引的结构如下图所示:

它也是B+树,即data do***in中存储数据记录的地址。因此,MyISAM中的索引检索算法首先是根据B+树搜索算法来搜索索引。如果指定的键存在,则取出其数据字段的值,然后以数据字段的值作为地址读取相应的数据记录。

MyISAM的索引方法也被称为“非聚集的”,因此调用它是为了与InnoDB的聚集索引相区别。

三。innodb表引擎存储(有一个共享的数据区域,但myisam没有)

1。InnoDB的存储结构

InnoDB使用页面存储结构。下面是InnoDB的表空之间的结构图:

Innodb表:有两种存储方式:

1默认情况下,每个表都有一个独立的表结构定义文件和一个多表数据+索引共享文件。

Tb_name.frm表结构在指定的数据库中。

Ib #共享表空是数据库目录中的datadir。

2使用独立的表空。每个表都有一个独立的表结构文件和一个独立的table 空文件。

Tb_name.frm表结构在指定的数据库中。

Tb_name.ibd表数据和索引文件

页面存储格式如下图所示:

页面的存储由以下部分组成:

页头(Page Header):记录页面的控制信息,共占150字节,包括页的左右兄弟页面指针、页面空间使用情况等,页头的详细说明会在下一篇中描述。最小虚记录、最大虚记录:两个固定位置存储的虚记录,本身并不存储数据。最小虚记录比任何记录都小,而最大虚记录比任何记录都大。记录堆(record heap):指上图的橙***部分。表示页面已分配的记录空间,也是索引数据的真正存储区域。记录堆分为两种,即有效记录和已删除记录。有效记录就是索引正常使用的记录,而已删除记录表示索引已经删除,不在使用的记录,如上图的深蓝色部分。随着记录的更新和删除越来越频繁,记录堆中已删除记录将会越多,即会出现越来越多的空洞(碎片)。这些已删除记录连接起来,就会成为页面的自由空间链表。未分配空间:指页面未使用的存储空间,随着页面不断使用,未分配空间将会越来越小。当新插入一条记录时,首先尝试从自由空间链表中获得合适的存储位置(空间足够),如果没有满足的,就会在未分配空间中申请。slot区:slot是一些页面有效记录的指针,每个slot占两个字节,存储了记录相对页面首地址的偏移。如果页面有n条有效记录,那么slot的数量就在n/8+2~n/4+2之间。下一节详细介绍slot区,它是记录页面有序和二分查找的关键。页尾(Page Tailer):页面最后部分,占8个字节,主要存储页面的校验信息。

一页的页眉、最大/最小虚拟记录和页脚在该页中有一个固定的存储位置。

2。InnoDB的索引结构

InnoDB使用B+树来存储索引。

Innodb的一个表可能包含多个索引,每个索引由B+树存储。索引包括聚集索引和辅助索引。聚集索引使用表的主键作为索引键,并且包含表的所有字段。二级索引只包含索引键和聚集索引键(主键)的内容,不包含其他字段。每个索引都是B+树。每个B+树由许多页面组成,每个页面的大小一般为16K。从B+树的组织结构来看,B树的页面可以分为:

leaf:B树级别为0的页面,存储所有记录的内容。

非叶节点:B树层次大于0的页面,只存储索引键和页面指针。

虽然InnoDB也使用B+Tree作为索引结构,但具体实现与MyISAM有很大不同。

第一个重要的区别是InnoDB的数据文件本身是一个索引文件。从上面我们知道,MyISAM索引文件和数据文件是分开的,索引文件只存储数据记录的地址。在InnoDB中,表数据文件本身就是一个按照B+树组织的索引结构,这个树的叶节点数据字段保存了完整的数据记录。这个索引的键是数据表的主键,所以InnoDB表数据文件本身就是主索引。

您可以看到叶节点包含完整的数据记录。这种索引称为聚集索引。因为InnoDB的数据文件是通过主键聚合的,所以InnoDB要求表必须有主键(MyISAM可能没有主键)。如果没有明确指定,MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键。如果没有这样的列,MySQL将自动为InnoDB表生成一个隐含字段作为主键。该字段为6字节长,其类型为长整形。

与MyISAM索引的第二个区别是,InnoDB的二级索引的数据字段存储的是对应记录主键的值,而不是地址。换句话说,InnoDB的所有二级索引都将主键称为数据域。例如,下图显示了在Col3上定义的辅助索引:

这里,英文字符的ASCII码被用作比较标准。索引聚合的实现使得按主键搜索的效率非常高,但是二级索引搜索需要两次检索索引:首先检索二级索引获得主键,然后使用主键检索一级索引中的记录。

了解不同存储引擎的索引实现,对正确使用和优化索引非常有帮助。比如了解了InnoDB的索引实现,就很容易理解为什么不建议使用过长的字段作为主键,因为所有的二级索引都是引用一级索引,过长的一级索引会使二级索引过大。例如,在InnoDB中使用非单调字段作为主键并不是一个好主意,因为InnoDB数据文件本身就是一个B+树。在插入新记录时,非单调主键会为了维护B+树的特性而造成数据文件的频繁拆分和调整,效率非常低,而使用自增字段作为主键是一个不错的选择。

本文来自年轻人玩的就是心跳投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/629398.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 07-11
下一篇 07-11

相关推荐

  • mysql驱动jar包怎么装 mysql驱动包与mysql版本

    当您使用Idea和PyCharm连接到MySQL时,可能会遇到以下错误:服务器返回无效时区。去’高级’标签和设置‘serverTimezone & # 8217属性。今天我整理几个解决方案,供大家参考。首先我们来定位一下原因:原因:服务器返回了无效的时区。转到“高级”选项卡,手动设

    2023-07-28 06:51:01
    998 0
  • html连接mysql数据库PHP eclipse连接mysql数据库步骤

    将模拟仿真数据插入Mysql数据库有时候,我们在测试网站的时候需要大量的仿真数据,但是php并没有提供生成仿真数据的工具。这个时候我想到了mockjs可以生成仿真数据。能否将Mockjs生成的仿真数据填充到数据库中?然后开始工作:例如,mysql数据库表是以下字段:因此,参考模拟文

    2023-07-27 10:17:01
    190 0
  • mysql最新版安装教程 mysql数据库建表方法

    升级版本选择原则和建议MySQL的升级需要遵循以下几条原则和建议:支持从MySQL5.7升级到8.0,注意仅支持GA版本之间的升级。不支持跨大版本的升级,如从5.6升级到8.0是不支持的。建议升级大版本前先升级到当前版本的最近小版本,如5.7先升级到5.7.35后再升级到8.0。在大版本内部

    2023-07-25 19:46:01
    968 0
  • mysql客户端哪个好用 最好的MySQL客户端推荐

    我们在选择工具的时候,往往会优先考虑那些免费的,好用的!Navicat作为一款付费软件,功能强大,但并不能阻止我们探索新的工具。最近体验了MySQL的官方客户端工具MySQL Workbench。本文将它与Navicat进行对比,看它能否取代Navicat!固定我们先安装MySQL Workbench。上面有个

    2023-07-22 08:56:01
    982 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信