WEB开发网
开发学院数据库MySQL MySQL数据库优化(四) 阅读

MySQL数据库优化(四)

 2008-06-12 11:07:59 来源:WEB开发网   
核心提示: 想要将一个文本文件加载到数据表中,可以使用 LOAD DATA INFILE,MySQL数据库优化(四)(6),这通常是使用大量 INSERT 语句的20倍, 通过一些额外的工作,运行 ALTER TABLE tbl_name ENABLE KEYS 代替 myisamchk -r -q

想要将一个文本文件加载到数据表中,可以使用 LOAD DATA INFILE。这通常是使用大量 INSERT 语句的20倍。

通过一些额外的工作,就可能让 LOAD DATA INFILE 在数据表有大量索引的情况下运行的更快。步骤如下:

用 CREATE TABLE 随便创建一个表。

执行 FLUSH TABLES 语句或 mysqladmin flush-tables 命令。

执行 myisamchk --keys-used=0 -rq /path/to/db/tbl_name 命令,删掉数据表的所有索引。

执行 LOAD DATA INFILE,数据插入到表中,由于无需更新表索引,因此这将非常快。

如果将来只是读取改表,运行 myisampack 让数据表变得更小点。详情查看"15.1.3.3 Compressed Table Characteristics"。

运行 myisamchk -r -q /path/to/db/tbl_name 重建索引。创建的索引树在写入磁盘前先保存在内存中,这省去了磁盘搜索,因此速度快多了。重建后的索引树分布非常均衡。

执行 FLUSH TABLES 语句或 mysqladmin flush-tables 命令。

注意,LOAD DATA INFILE 将数据插入一个空表时,也会做前接优化;主要的不同在于:运行 myisamchk 会分配更多的临时内存用于创建索引,而执行 LOAD DATA INFILE 命令则是让数据库服务器分配内存用于重建索引。从 MySQL 4.0 起,可以运行 ALTER TABLE tbl_name DISABLE KEYS 来代替 myisamchk --keys-used=0 -rq /path/to/db/tbl_name,运行 ALTER TABLE tbl_name ENABLE KEYS 代替 myisamchk -r -q /path/to/db/tbl_name。这么做就可以省去 FLUSH TABLES 步骤。

可以在锁表后,一起执行几个语句来加速 INSERT 操作:

  LOCKTABLESaWRITE;
  INSERTINTOaVALUES(1,23),(2,34),(4,33);
  INSERTINTOaVALUES(8,26),(6,29);
  UNLOCKTABLES;

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:MySQL 数据库 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接