mysql优化-索引文件和数据文件分目录存储

作者: wxfeng 分类: 未分类 发布时间: 2017-08-22 00:00    阅读 1,179 次

MyISAM 是MySQL 的默认存储引擎。MyISAM 不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT 为主的应用基本上都可以使用这个引擎来创建表。

每个MyISAM 在磁盘上存储成3 个文件,其文件名都和表名相同,但扩展名分别是:

  • .frm(存储表定义);

  • .MYD(MYData,存储数据);

  • .MYI (MYIndex,存储索引)。

数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度。

要指定索引文件和数据文件的路径,需要在创建表的时候通过DATA DIRECTORY 和INDEX DIRECTORY 语句指定,也就是说不同MyISAM 表的索引文件和数据文件可以放置到不同的路径下。文件路径需要是绝对路径,并且具有访问权限。

具体操作步骤(仅限linux操作系统):

首先要创建/home/test/data目录并修改/home/test/index目录的所有者及对应的组:

chown -R mysql:mysql /home/test/data
chown -R mysql:mysql /home/test/index

CREATE TABLE `test` (
  `strative_id` VARCHAR(16)  NOT NULL,  
  `date_id` VARCHAR(8) NOT NULL,  
  `qua_id` VARCHAR(4)  NOT NULL,  
  `fh` DECIMAL(16,6) DEFAULT NULL,  
  `dl` DECIMAL(16,6) DEFAULT NULL,  
  PRIMARY KEY (`strative_id`,`date_id`,`qua_id`)
) ENGINE=MYISAM DATA DIRECTORY = '/home/test/data' INDEX DIRECTORY= '/home/test/index';

ALTER TABLE D_TF_DATA_AGGREGATION_1 DATA DIRECTORY= '/home/test/data';
ALTER TABLE D_TF_DATA_AGGREGATION_1 INDEX DIRECTORY= '/home/test/index';

show warnings;
-- alter操作 --  <INDEX DIRECTORY> option ignored
-- alter操作 --  <DATA DIRECTORY> option ignored

— 可见指定DATA DIRECTORY 和INDEX DIRECTORY操作只可以在创建表的时候指定,不可以alter(ALTER TABLE忽略DATA DIRECTORY和INDEX DIRECTORY表选项)。

注:这种可以指定INDEX DIRECTORY 和 DATA DIRECTORY 操作,在当磁盘分区不足的时候,可以将数据文件放在其它的分区上。

注:INNODB 表要是独立表空间(innodb_file_per_table=1)。

注:目前只有5.6才支持单表指定目录,且目录是mysql:mysql。

注: 在Windows中将忽略DATA DIRECTORY和INDEX DIRECTORY选项。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

一条评论

发表评论

您的电子邮箱地址不会被公开。