这些性能技巧补充了快速插入的一般指南第8.2.5.1节,“优化INSERT语句”.
对于一个
MyISAM
表中,您可以使用并发插入来添加行选择
如果数据文件中间没有被删除的行,则语句正在运行。看到第8.11.3节,“并发插入”.通过一些额外的工作,它是可能的
加载数据
跑得更快一点MyISAM
当表有很多索引时,表。使用以下步骤:执行一个
刷新表
语句或一个mysqladmin刷新表命令。使用myisamchk——匙= 0中移动
/ / 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做1插入
连接5做1000插入
如果不使用锁定,连接2、3和4在1和5之前结束。如果使用锁定,连接2、3和4可能不会在1或5之前完成,但总时间应该快40%左右。
插入
,更新
,删除
操作在MySQL中是非常快的,但是您可以通过为所有执行超过5次连续插入或更新的操作添加锁来获得更好的整体性能。如果你连续插入很多次,你可以做锁表
紧随其后的是一个打开表
每隔一段时间(每1000行左右)允许其他线程访问表。这仍然会带来不错的性能提升。提高性能
MyISAM
表,都加载数据
而且插入
,将键缓存放大key_buffer_size
系统变量。看到第5.1.1节,“配置服务器”.