这些性能技巧补充了快速插入的一般准则第8.2.5.1节,优化INSERT语句.
对于一个
MyISAM
表中,可以使用并发插入同时添加行选择
如果数据文件中间没有被删除的行,则语句正在运行。看到第8.11.3节“并发插入”.通过一些额外的工作,这是有可能的
加载数据
跑得再快一点MyISAM
表,当表有多个索引时。请使用以下步骤:执行一个
刷新表
语句或mysqladmin刷新表命令。使用Myisamchk——keys-used=0 -rq
/ / db / tbl_name /路径
删除对表索引的所有使用。将数据插入表中
加载数据
.这不会更新任何索引,因此非常快。如果将来只打算从表中读取,请使用myisampack压缩它。看到第16.2.3.3节“压缩表特征”.
重新创建索引myisamchk rq
/ / db / tbl_name /路径
.这将在将索引树写入磁盘之前在内存中创建索引树,这比在此期间更新索引快得多加载数据
因为它避免了大量的磁盘查找。生成的索引树也是完美平衡的。执行一个
刷新表
语句或mysqladmin刷新表命令。
加载数据
,则自动执行上述优化MyISAM
要插入数据的表为空。自动优化和显式使用过程之间的主要区别是您可以让myisamchk方法时,为索引创建分配的临时内存要比您希望服务器为索引重新创建分配的内存多得多加载数据
声明。属性的非唯一索引也可以禁用或启用
MyISAM
表中使用下列语句而不是myisamchk.如果使用这些语句,可以跳过刷新表
操作:ALTER TABLEtbl_name禁用键;ALTER TABLEtbl_name使键;
加快速度
插入
对于非事务性表,使用多条语句执行的操作将锁定您的表:锁表写入;INSERT INTO a VALUES (1,23),(2,34),(4,33);INSERT INTO a VALUES (8,26),(6,29);...打开表;
这有利于性能,因为索引缓冲区毕竟只刷新到磁盘一次
插入
报表已完成。正常情况下,索引缓冲区刷新的次数应该与当前的次数一样多插入
语句。如果可以用单个锁语句插入所有行,则不需要显式锁语句插入
.锁定还降低了多个连接测试的总时间,尽管单个连接的最大等待时间可能会因为等待锁定而增加。假设5个客户端试图同时执行插入,如下所示:
连接1执行1000个插入
连接2、3和4进行一次插入
连接5执行1000个插入
如果不使用锁定,连接2、3和4将在1和5之前结束。如果使用锁定,连接2、3和4可能不会在1或5之前完成,但总时间应该快40%左右。
插入
,更新
,删除
MySQL的操作非常快,但是你可以通过对所有连续插入或更新超过5次的操作添加锁来获得更好的整体性能。如果你做很多连续的插入,你可以做锁表
接着是打开表
每隔一段时间(每1000行左右)允许其他线程访问表。这仍然会带来不错的性能提升。提高性能
MyISAM
表格,两者都有加载数据
而且插入
,通过增加key_buffer_size
系统变量。看到第5.1.1节“配置服务器”.