MySQL手冊版本 5.0.20-MySQL最佳化(四) (1)(4)

來源:互聯網
上載者:User



可以在鎖表後,一起執行幾個語句來加速 INSERT 操作:


LOCK TABLES a WRITE;

INSERT INTO a VALUES (1,23),(2,34),(4,33);

INSERT INTO a VALUES (8,26),(6,29);

UNLOCK TABLES;

這對效能提高的好處在於:直到所有的 INSERT 語句都完成之後,索引緩衝一次性重新整理到磁碟中。通常情況是,多有少次 INSERT 語句就會有多數次索引緩衝重新整理到磁碟中的開銷。如果能在一個語句中一次性插入多個值的話,顯示的鎖表操作也就沒必要了。對事務表而言,用 BEGIN/COMMIT 代替 LOCK TABLES 來提高速度。鎖表也回降低多次串連測試的總時間,儘管每個獨立串連為了等待鎖的最大等待時間也會增加。例如:


Connection 1 does 1000 inserts

Connections 2, 3, and 4 do 1 insert

Connection 5 does 1000 inserts

如果沒有鎖表,則串連2,3,4會在1,5之前就做完了。如果鎖表了,則串連2,3,4可能在1,5之後才能完成,但是總時間可能只需要40%。MySQL的 INSERT, UPDATE, DELETE 操作都非常快,不過在一個語句中如果有超過5個插入或者更新時最好加鎖以得到更好的效能。如果要一次性做很多個插入,最好是在每個迴圈(大約1000次)的前後加上 LOCK TABLES 和 UNLOCK TABLES,從而讓其他進程也能訪問資料表;這麼做效能依然不錯。INSERT 總是比 LOAD DATA INFILE 插入資料來得慢,因為二者的實現策略有著分明的不同。


想要讓 MyISAM 表更快,在 LOAD DATA

INFILE 和 INSERT 時都可以增加系統變數 key_buffer_size 的值,詳情請看"7.5.2 Tuning Server Parameters"。


7.2.13 加速 UPDATE

UPDATE 語句的最佳化和 SELECT 一樣,只不過它多了額外的寫入開銷。寫入的開銷取決於要更新的記錄數以及索引數。如果索引沒有發生變化,則就無需更新。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.