文章目录
1、原题
1.1、原题
1.2、答案
D、F
2、题目解析
2.1、题干解析
本题主要考察MySQL表空间的相关知识。
2.2、选项解析
- 二进制日志单独保存在二进制日志文件中,所以选项A错误。
- 通用表空间是需要单独创建的,不被包含在系统表空间中,所以选项B错误。
- 如果MySQL配置了file-per-table参数,则系统表空间就不是创建新表的默认位置,所以选项C错误。
- MySQL有系统表空间、通用表空间和file-per-table表空间三种。通用表空间和file-per-table表空间只保存表的索引和数据,undo日志仍然在系统表空间保存。如果表用的不是file-per-table文件也不是通用表空间,那么表的数据和索引也保存在系统表空间中。除了表的数据和索引,系统表空间还保存了InnoDB数据字典、doublewrite buffer(双写缓冲区)、change buffer(变更缓冲区)和undo logs(撤销日志)的存储区域,其中undo日志也是可以指定另外文件单独保存,但默认保存在系统表空间。所以选项D、F正确。
- redo log默认保存在iblog文件里,所以选项E错误。
3、知识点
3.1、知识点1:InnoDB System Tablespace系统表空间
- 系统表空间的存储内容:
- InnoDB数据字典、doublewrite buffer(双写缓冲区)、change buffer(变更缓冲区)和undo logs(撤销日志)的存储区域。
- 如果表用的不是file-per-table文件也不是通用表空间,那么表的数据和索引也保存在系统表空间中。
- 系统表空间数据文件的大小、数量和位置:系统表空间数据文件的大小、数量和尾椎由innodb_data_file_path启动选项定义。系统表空间可以有一个或多个数据文件。默认情况下,在数据目录中创建一个名为ibdata1的系统表空间数据文件。
3.2、知识点2:InnoDB General Tablespaces通用表空间
通用表空间是一个共享的InnoDB表空间,使用CREATE TABLESPACE语法创建,提供以下功能。
- 多表数据和索引的存储:与系统表空间类似,通用表空间是共享表空间,能够存储多个表的数据和索引。
- 节省内存:通用表空间相比file-per-table表空间有一个潜在的内存优势,即相同数量的表消耗更少的内存。
- 独立于数据目录的存储:通用表空间的数据文件可以放在相对于或独立于MySQL数据目录的目录中,这样允许你单独管理关键表的性能,为特定的表设置RAID或DRBD,或者将表绑定到特定的磁盘上。
- 使用方法1:在数据目录中创建一个普通表空间。
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
- 使用方法2:在数据目录之外的目录中创建一个普通表空间。
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE '/my/tablespace/directory/ts1.ibd' Engine=InnoDB;
4、总结
- MySQL有系统表空间、通用表空间和file-per-table表空间三种。通用表空间和file-per-table表空间只保存表的索引和数据,undo日志仍然在系统表空间保存。如果表用的不是file-per-table文件也不是通用表空间,那么表的数据和索引也保存在系统表空间中。
- 系统表空间的存储内容:
- InnoDB数据字典、doublewrite buffer(双写缓冲区)、change buffer(变更缓冲区)和undo logs(撤销日志)的存储区域。
- 如果表用的不是file-per-table文件也不是通用表空间,那么表的数据和索引也保存在系统表空间中。
- 系统表空间数据文件的大小、数量和位置:系统表空间数据文件的大小、数量和尾椎由innodb_data_file_path启动选项定义。系统表空间可以有一个或多个数据文件。默认情况下,在数据目录中创建一个名为ibdata1的系统表空间数据文件。
- 通用表空间是一个共享的InnoDB表空间,需要使用CREATE TABLESPACE语法进行显式的创建,类似于系统表空间,相比file-per-table的优点在于可以存储多张表因此节省内存,相比系统表空间的优点在于独立于数据目录的存储。
- 二进制日志、redo日志默认都有单独的文件保存,undo日志默认保存在系统表空间,但也可以单独存储到指定文件中。