linux sqlserver_SQL Server 与 MySQL存储引擎

论坛 期权论坛 脚本     
已经匿名di用户   2021-11-11 18:05   4218   0

SQLServer 与 MySQL 出自于不同的公司,最大的区别在于一个开源、一个不开源;不开源的提供低版本免费使用,无法使用高级功能,而开源的就不一样,提供所有的功能使用;

关于存储引擎本人能力有限学识浅薄,只能记录一下我能力范围内对SQL Server 和 MySQL 存储引擎的理解;如果有写的不对的地方请各路大神多多指导。

存储引擎可以分为两部分理解,一部分是存储,一部分是引擎;存储是把数据存储到磁盘上,引擎是为数据存储到磁盘上增加动力的,也就是提升数据存储的速度同时也对数据更新提升速度优化I/O。说到存储一定会想到硬件想到性能,由于本人学的太浅,没法去讲磁盘的内部结构和底层原理。

SQLServer 与 MySQL 存储引擎它们的底层都是磁盘,而它们存储的算法最小单元都是页,多个页组成一个段,多个段组成一个区,其实区就是表;这是他们的通用步骤。但是SQL Server的一个页是8KB 而MySQL的一个页是16KB;页是SQL Server和MySQL 读取的最小I/O单元,也就是说读取某个表中的数据时,会把需要查询行所在的页都读取出来,这就是我有时候感觉到在SQL Server中查询时比在MySQL中时快时慢。

存储引擎不仅提供数据读写速度,还提供数据安全、事务管理、日志、锁、备份还原、自动故障恢复、高可用支持。

存储引擎结构

SQLServer 安装完成后会在SQLServer 配置管理服务器中查看到MSSQLSERVER服务正在运行。

862384d3b65c6e67401767e99a6f0550.png

打开登录数据库可以看到任何数据库的数据存储文件,数据文件以.mdf 结尾的是主文件、以.ndf结尾的是辅助文件同样也可以存储数据,ndf可以有多个但是mdf只能有一个,日志是以.ldf结尾的文件,默认不开启事务日志。

66c3fecc9932ccd60fac6b3b2de33cc2.png

代码查询

select * from [Monitors_DB].[dbo].[sysfiles]

a546811d2d8aea5399d93a020cb295ce.png

如果某个数据创建的物理文件只有一个主数据文件和日志文件,那么所有与数据库发生的操作数据将存储于主数据文件中,如果某个数据库创建的数据有一个主数据文件两个辅助数据文件,一个日志文件,那么数据存储时,会发生等值分配,例如:主数据文件设置大小20G、1号辅助数据文件设置大小40G、2号辅助数据文件设置大小60G,如果有一个600M的数据需要存储在这个数据库中,那么主数据文件将存储100M、1号将存储200M、2号将存储300M。

MySQL查询存储引擎,mysql与SQLserver不一样,mysql能查看存储引擎的任何细节,而sqlserver不能查看,有些即使能查看也非常的麻烦,因位它是不开源的。

mysql> select @@default_storage_engine;  --查看当前使用的引擎+--------------------------+| @@default_storage_engine |+--------------------------+| InnoDB                   |+--------------------------+1 row in set (0.00 sec)
mysql> show engines;  --查看mysql所有的存储引擎类型+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         || MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         || MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         || BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         || PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         || MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         || ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         || InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        || FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
mysql> show create table city;   --查看表使用的是哪一类存储引擎| city  | CREATE TABLE `city` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `Name` char(35) NOT NULL DEFAULT '',  `CountryCode` char(3) NOT NULL DEFAULT '',  `District` char(20) NOT NULL DEFAULT '',  `Population` int(11) NOT NULL DEFAULT '0',  PRIMARY KEY (`ID`),  KEY `CountryCode` (`CountryCode`),  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`Code`)) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1 |
[root@Focus_Linux_01 ~]#  cd /data/mysql/data/   --数据目录下查看存储引擎结构[root@Focus_Linux_01 /data/mysql/data]#  lltotal 123032-rw-r----- 1 mysql mysql       56 Jun  9 05:21 auto.cnfdrwxr-x--- 2 mysql mysql       48 Jun 27 22:46 binlog-rw-r----- 1 mysql mysql   111298 Jun 24 07:44 Focus_Linux_01.err-rw-r----- 1 mysql mysql        6 Jul  1 21:29 Focus_Linux_01.pid-rw-r----- 1 mysql mysql      654 Jul  1 21:29 ib_buffer_pool-rw-r----- 1 mysql mysql 12582912 Jul  6 22:48 ibdata1-rw-r----- 1 mysql mysql 50331648 Jul  6 22:48 ib_logfile0-rw-r----- 1 mysql mysql 50331648 Jul  6 22:48 ib_logfile1-rw-r----- 1 mysql mysql 12582912 Jul  6 22:20 ibtmp1drwxr-x--- 2 mysql mysql     4096 Jun  9 05:21 mysqldrwxr-x--- 2 mysql mysql     8192 Jun  9 05:21 performance_schema

在mysql的安装数据目录下,我们可以看到

开启了二进制日志:binlog,

错误日志文件: Focus_Linux_01.err

缓冲池文件:ib_buffer_pool

临时表存储文件:ibtmp1

系统数据字典信息,UNDO表空间等数据:ibdata1

REDO日志文件、事务日志文件:ib_logfile0~ib_logfile1

进入一个数据 world 查看表的文件,我们可以看到InnoDB引擎中的表会存储两个文件,一个是.frm 另一个是.ibd 文件;frm存储的是表字典和统计信息,ibd存储的是表的数据行和索引数据。

[root@Focus_Linux_01 /data/mysql/data]#  cd world/[root@Focus_Linux_01 /data/mysql/data/world]#  lltotal 1416-rw-r----- 1 mysql mysql    8710 Jun 14 10:25 city.frm-rw-r----- 1 mysql mysql 1015808 Jun 20 09:21 city.ibd
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP