mysql insert慢_MySQL insert语句慢查询的优化
近期發(fā)現(xiàn)MySQL slow log 里面有很多慢查詢,而分析慢查詢?nèi)罩景l(fā)現(xiàn)大量的慢查詢是insert語句的。在高峰期(早上10點左右)半小時的慢查詢量可以到28G左右。遂決定優(yōu)化
優(yōu)化方法:
1、 一個客戶端在一個時候要插多條數(shù)據(jù),那么用多個values
insert into t1 values(...),(...),(...)
如果是往一個非空的表里插數(shù)據(jù),可調(diào)節(jié)bulk_insert_buffer_size(缺省為8388608字節(jié)=8M)
2、 如果多個客戶端在同時插許多條數(shù)據(jù),那么用insert delayed語句
利:客戶端馬上返回,數(shù)據(jù)排成一隊;數(shù)據(jù)整齊的寫到一個塊里,而不是分散。
弊:如果這個表被查獲刪數(shù)據(jù),那么插入會變慢,另外,為這個表起一個handler線程來處理這些數(shù)據(jù)也要耗費一些額外資源
待插的數(shù)據(jù)放在內(nèi)存里,一旦數(shù)據(jù)庫被意外終止(如kill -9),那么數(shù)據(jù)會丟失。
這個方法只適用于myisam,memory,archive,blackhole引擎類表。
可調(diào)節(jié)delayed_insert_limit(缺省為一次100條)
delayed_insert_timeout(缺省為300)秒內(nèi),若無新的insert delayed語句,則handler線程退出。
delayed_queue_size(缺省為1000條)一旦滿了,客戶端的insert delayed會阻塞。
比第一個方法要慢。
而且對Myisam來說,在可以使用方法3時,不需用此方法2。
3、對Myisam表來說,如果一個表中間沒有刪除過數(shù)據(jù),那么,在Select語句執(zhí)行時,可以同時執(zhí)行insert語句將數(shù)據(jù)插在文件最后。
concurrent_insert必須為1(缺省就是1)
4、從文本文件執(zhí)行l(wèi)oad data infile一般要比用insert語句快20倍。
如果表有索引,可以先去掉索引,load完后,再加上索引。可以提高速度(相比load同時建索引,可以減少disk seek)。
這個事后建索引的方法在msisam表為空時自動執(zhí)行。
5、如果插入多條語句,可以先lock tables t write,插入后再unlock tables(索引會只flush一次); 但如果當中只有1條insert,那么不需要。
6、要提高Myisam表的load data和insert速度,可提高key_buffer_size(缺省為8M)
如果機器有256M以上內(nèi)存,那么可以設(shè)key_buffer_size為64M,table_open_cache可以調(diào)高為256(缺省為64)
如果有128M以上內(nèi)存,可以設(shè)key_buffer_size為16M
總結(jié)
以上是生活随笔為你收集整理的mysql insert慢_MySQL insert语句慢查询的优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的服务器在什么模式下工作_My
- 下一篇: mysql 实体关系表_实体关系图