優(yōu)化MySQL插入方法的五個(gè)妙招
以下是涉及到插入表格的查詢的5種改進(jìn)方法:
1)使用LOAD DATA INFILE從文本下載數(shù)據(jù)這將比使用插入語(yǔ)句快20倍。
2)使用帶有多個(gè)VALUES列表的INSERT語(yǔ)句一次插入幾行這將比使用一個(gè)單行插入語(yǔ)句快幾倍。調(diào)整bulk_insert_buffer_size變量也能提高(向包含行的表格中)插入的速度。
3)可以對(duì)myisam表并行插入Concurrent_insert系統(tǒng)變量可以被設(shè)置用于修改concurrent-insert處理。該變量默認(rèn)設(shè)置為1。如果concurrent_insert被設(shè)置為0,并行插入就被禁用。如果該變量被設(shè)置為2,在表的末端可以并行插入,即便該表的某些行已經(jīng)被刪除。
4)使用插入延遲
如果你的客戶不能或無(wú)需等待插入完成的時(shí)候,這招很有用。當(dāng)你使用MySQL存儲(chǔ),并定期運(yùn)行需要很長(zhǎng)時(shí)間才能完成的SELECT和UPDATE語(yǔ)句的時(shí)候,你會(huì)發(fā)現(xiàn)這種情況很常見(jiàn)。當(dāng)客戶使用插入延遲,服務(wù)器立刻返回,如果表沒(méi)有被其他線程調(diào)用,則行會(huì)列隊(duì)等待被插入。使用插入延遲的另一個(gè)好處就是從多個(gè)客戶插入的情況會(huì)被綁定并記錄在同一個(gè)block中。這將比處理多個(gè)獨(dú)立的插入要快得多。
5)插入之前將表鎖定(只針對(duì)非事務(wù)處理型的表)
這將提高數(shù)據(jù)庫(kù)性能,因?yàn)樗饕彌_區(qū)只是在所有的插入語(yǔ)句完成后才對(duì)磁盤進(jìn)行一次刷新。通常情況下,有多少個(gè)插入語(yǔ)句就會(huì)有多少次索引緩沖區(qū)刷新。如果你可以用一個(gè)插入語(yǔ)句實(shí)現(xiàn)所有行的插入,則無(wú)需使用顯式鎖定語(yǔ)句。
要想更快地對(duì)事務(wù)型表插入,你應(yīng)該使用START TRANSACTION和COMMIT語(yǔ)句,而不是LOCK TABLES語(yǔ)句。
【編輯推薦】