MySQL大容量快速插入方法与语句优化共享
复制代码代码如下所示:
连接1执行1000个插入
2个连接,3个和4个做1个插入
连接5执行1000个插入
如果不使用锁定,2, 3和4将在1和5之前完成。如果使用锁定,2, 3和4可能不会在1或5之前完成,但总时间应该在40%左右。
插入、更新和删除操作都是在MySQL的速度非常快,和更好的性能,可以通过插入或更新操作和锁超过5次了。如果多插入一行行锁表,可以执行,然后打开表(约1000行)立即执行允许其他线程访问表。这也将获得良好的性能。
插入数据加载比LOAD DATA INFILE慢得多,即使使用上述策略。
增加对MyISAM表的LOAD DATA INFILE和插入的速度,关键是通过增加缓存key_buffer_size系统变量扩展。
插入语法
复制代码代码如下所示:
{ } {插入low_priority延迟high_priority忽略} | |
{在} { }(tbl_name col_name,…)
({ } |默认值表达式,…),(…),…
{重复密钥更新col_name =表达式,…}
或:
复制代码代码如下所示:
{ } {插入low_priority延迟high_priority忽略} | |
{在} tbl_name
设置默认col_name = { } | expr,…
{重复密钥更新col_name =表达式,…}
或:
复制代码代码如下所示:
U3000
插入high_priority } { } { low_priority忽略|
{在} { }(tbl_name col_name,…)
选择…
{重复密钥更新col_name =表达式,…}
一、延迟使用
延迟器使用延迟插入操作应该用于插入和替换语句。当延迟插入操作时,队列中的服务器位置的数据行,并立即返回一个状态信息到客户端,使客户端可以继续操作之前的数据表实际上是插入记录。如果读者从数据表中读取数据,队列中的数据保存到没有读者。
然后,开始插入数据线,数据线的延迟(延迟行)队列。在插入操作,服务器还检查是否新的读请求到达等待。如果有,延迟数据队列被暂停,让读者继续操作。如果没有读者,服务器又开始插入延迟数据行。这个过程一直进行直到队列为空。
应注意的几个问题:
插入延迟应仅用于指定值列表的INSERT语句。服务器忽略插入延迟的延迟…SELECT语句。服务器忽略延迟插入的延迟…关于重复更新语句。
由于插线,声明立即返回,所以不能用last_insert_id()得到auto_increment价值,auto_increment值可由报表生成。
对于SELECT语句,在这些行真正插入之前,延迟行是不可见的。
延迟是一个依赖复制服务器忽略因为延迟不生产,不作为从属服务器主服务器相同的数据。注意,队列中的所有行,目前只存储在记忆中直到他们插入表。这意味着,如果你强迫中止mysqld(例如,使用杀- 9),或者如果mysqld意外停止,所有行不写入磁盘将丢失。