MyISAM 表的批量数据加载
概述
MyISAM引擎的表如何加速表的数据加载
解决方案
-
MyISAM
您还可以使用以下语句而不是myisamchk 来禁用或启用表的非唯一索引 。如果您使用这些语句,则可以跳过这些FLUSH TABLES
操作:ALTER TABLE tbl_name DISABLE KEYS; ALTER TABLE tbl_name ENABLE KEYS;
-
要加快
INSERT
对非事务性表使用多个语句执行的操作,请锁定您的表:LOCK TABLES a WRITE; INSERT INTO a VALUES (1,23),(2,34),(4,33); INSERT INTO a VALUES (8,26),(6,29); ... UNLOCK TABLES;
INSERT
这有利于性能,因为索引缓冲区仅在所有语句完成 后刷新到磁盘一次 。通常,索引缓冲区刷新次数与INSERT
语句数一样多。如果您可以使用单个 插入所有行,则不需要显式锁定语句INSERT
。锁定还减少了多连接测试的总时间,尽管单个连接的最大等待时间可能会增加,因为它们等待锁定。假设五个客户端尝试同时执行插入,如下所示:
-
连接 1 执行 1000 次插入
-
连接 2、3 和 4 做 1 个插入
-
连接 5 执行 1000 次插入
如果不使用锁定,连接 2、3 和 4 在 1 和 5 之前完成。如果使用锁定,连接 2、3 和 4 可能不会在 1 或 5 之前完成,但总时间应该约为 40%快点。
INSERT
、UPDATE
和DELETE
操作在 MySQL 中非常快,但是您可以通过在执行超过 5 次连续插入或更新的所有操作周围添加锁来获得更好的整体性能。如果您进行了很多连续的插入操作,则可以在一段时间LOCK TABLES
后执行UNLOCK TABLES
一次操作(每 1,000 行左右)以允许其他线程访问表。这仍然会带来不错的性能提升。 -
-
为了提高
MyISAM
表的性能,对于LOAD DATA
和INSERT
,通过增加key_buffer_size
系统变量来扩大键缓存。
喜欢请赞赏一下啦^_^
微信赞赏
支付宝赞赏