首页 > 数据库 > MySQL > 正文

优化MySQL插入的5种改进方法

2024-07-24 12:40:08
字体:
来源:转载
供稿:网友

以下是涉及到插入表格的查询的5种改进方法:

1)        使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍。

当使用load命令导入数据的时候,适当的设置可以提高导入的速度,对于MyISAM存储引擎的表,可以通过以下方式快速导入大量的数据
ALTER TABLE tb1_name DISABLE KEYS;
Loading the data
ALTER TABLE tb1_name ENABLE KEYS;
DISABLE KEYS和ENABLES KEYS用来打开或关闭MyISAM表非唯一索引的更新,在导入大量的数据到一个空的MyISAM表时,通过设置这两个命令,可以提高导入的效率。对于导入大量数据到一个空的MyISAM表,默认就是先导入数据然后才创建索引的,所以不用进行设置。
下面的例子中,用LOAD语句导入数据耗时115.12秒
Mysql >load data infile ‘/home/mysql/file_test.txt’ into table film_test2;
Query OK,529256 rows affected (1 min 55.12sec)
Rocords:529056 Delete:0 Skipped:0Waring :0
而用alter table tb1_name disable keys方式总耗时6.34+12.25=18.59秒,提高了6倍多。
Mysql >alter tbale film_test2 disbale keys;
Query OK,0 rows affected (0.00sec)

Mysql>load data infile ‘/home/mysql/film_test.txt’ into table film_test2;
Query OK,529056 rows affected(6.34 sec)
Records:529056 Delete :0 Skipped:0 Warings:0
Mysql>alter table film_test2 enable keys;
Query OK,0 rows affected(12.25 sec)

2)使用带有多个VALUES列表的INSERT语句一次插入几行比使用一个单行插入语句快几倍。调整bulk_insert_buffer_size变量也能提高(向包含行的表格中)插入的速度。

 

3)可以对myisam表并行插入Concurrent_insert系统变量可以被设置用于修改concurrent-insert处理。该变量默认设置为1。如果concurrent_insert被设置为0,并行插入就被禁用。如果该变量被设置为2,在表的末端可以并行插入,即便该表的某些行已经被删除。


4)使用插入延迟

如果你的客户不能或无需等待插入完成的时候,这招很有用。当你使用MySQL存储,并定期运行需要很长时间才能完成的SELECT和UPDATE语句的时候,你会发现这种情况很常见。当客户使用插入延迟,服务器立刻返回,如果表没有被其他线程调用,则行会列队等待被插入。使用插入延迟的另一个好处就是从多个客户插入的情况会被绑定并记录在同一个block中。这将比处理多个独立的插入要快得多。

 

5)插入之前将表锁定(只针对非事务处理型的表)

这将提高数据库性能,因为索引缓冲区只是在所有的插入语句完成后才对磁盘进行一次刷新。通常情况下,有多少个插入语句就会有多少次索引缓冲区刷新。如果你可以用一个插入语句实现所有行的插入,则无需使用显式锁定语句。

要想更快地对事务型表插入,你应该使用START TRANSACTION和COMMIT语句,而不是LOCK TABLES语句。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表