日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql insert慢_MySQL insert语句慢查询的优化

發布時間:2025/3/12 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql insert慢_MySQL insert语句慢查询的优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

近期發現MySQL slow log 里面有很多慢查詢,而分析慢查詢日志發現大量的慢查詢是insert語句的。在高峰期(早上10點左右)半小時的慢查詢量可以到28G左右。遂決定優化

優化方法:

1、 一個客戶端在一個時候要插多條數據,那么用多個values

insert into t1 values(...),(...),(...)

如果是往一個非空的表里插數據,可調節bulk_insert_buffer_size(缺省為8388608字節=8M)

2、 如果多個客戶端在同時插許多條數據,那么用insert delayed語句

利:客戶端馬上返回,數據排成一隊;數據整齊的寫到一個塊里,而不是分散。

弊:如果這個表被查獲刪數據,那么插入會變慢,另外,為這個表起一個handler線程來處理這些數據也要耗費一些額外資源

待插的數據放在內存里,一旦數據庫被意外終止(如kill -9),那么數據會丟失。

這個方法只適用于myisam,memory,archive,blackhole引擎類表。

可調節delayed_insert_limit(缺省為一次100條)

delayed_insert_timeout(缺省為300)秒內,若無新的insert delayed語句,則handler線程退出。

delayed_queue_size(缺省為1000條)一旦滿了,客戶端的insert delayed會阻塞。

比第一個方法要慢。

而且對Myisam來說,在可以使用方法3時,不需用此方法2。

3、對Myisam表來說,如果一個表中間沒有刪除過數據,那么,在Select語句執行時,可以同時執行insert語句將數據插在文件最后。

concurrent_insert必須為1(缺省就是1)

4、從文本文件執行load data infile一般要比用insert語句快20倍。

如果表有索引,可以先去掉索引,load完后,再加上索引。可以提高速度(相比load同時建索引,可以減少disk seek)。

這個事后建索引的方法在msisam表為空時自動執行。

5、如果插入多條語句,可以先lock tables t write,插入后再unlock tables(索引會只flush一次); 但如果當中只有1條insert,那么不需要。

6、要提高Myisam表的load data和insert速度,可提高key_buffer_size(缺省為8M)

如果機器有256M以上內存,那么可以設key_buffer_size為64M,table_open_cache可以調高為256(缺省為64)

如果有128M以上內存,可以設key_buffer_size為16M

總結

以上是生活随笔為你收集整理的mysql insert慢_MySQL insert语句慢查询的优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。