一.LOW_PRIORITY
1.對於myisam默認是寫操做優先,讀操做滯後.經過該項更改,可使讀操做優先,寫操做在有空閒的時候再寫入.但該項可能在理論上形成,寫被永遠阻塞.php
SQL語句中使用示例:
UPDATE LOW_PRIORITY table_name SET colomu='val' WHERE id=1;mysql
該關鍵字一樣能夠在my.cnf中設置,調低全部的寫入優先級.sql
須要說明的是,執行帶有LOW_PRIORITY關鍵字的寫入,線程必須等待執行完纔會返回,並不是是異步,而是同步,因此建議將其放入隊列去寫入.
該關鍵字在discuz等成熟php+mysql系統中,都有使用.服務器
二.DELAY_KEY_WRITE併發
1.默認情形下,每次寫入有索引的數據表,都會直接將索引更新到磁盤,該項將會將索引更新保存在內存中,直到該表關閉的時候,纔將索引更新到磁盤異步
2.該項能夠在create table時指定,或者alter table sometable delay_key_write =1線程
3.若是斷電或系統崩潰,索引沒有及時更新到磁盤,下次啓動mysql時將須要修復數據表索引
4.經過手動flush table或者設置flush_time來指定多久flush table一次隊列
5.該項參數受mysql配置參數delay_key_write影響內存
a.on,表示僅僅對錶結構中使用了delay_key_write的myisam表起做用
b.off,不起做用,即使制定了delay_key_write
c.ALL,對全部的myisam起做用,不論有沒有指定delay_key_write
三.INSERT DELAYED
1.DELAYED調節符應用於INSERT和REPLACE語句。當DELAYED插入操做到達的時候, 服務器把數據行放入一個隊列中,並當即給客戶端返回一個狀態信息,這樣客戶端就能夠在數據表被真正地插入記錄以前繼續進行操做了。若是讀取者從該數據
表中讀取數據,隊列中的數據就會被保持着,直到沒有讀取者爲止。接着服務器開始插入延遲數據行(delayed-row)隊列中的數據行。在插入操做的同時,服務器還要檢查是否有新的讀取請求到達和等待。若是有,延遲數據行隊列就被掛起,容許讀取者繼續操做。當沒有讀取者的時候,服務器再次開始插入延遲的數據行。這個過程一直進行,直到隊列空了爲止。
2.對於myisam表,若是沒有空洞,insert和select是併發的(須要查看系統中參數,看是否支持該行爲),不多會用到.
查看myisam是否支持併發插入
SHOW VARIABLES LIKE 'concurrent_insert'
Variable_name Value
concurrent_insert 1
#0,關閉該功能
#1,無空洞時支持併發插入到數據表末尾(默認)
#2,爲全部MyISAM表啓用並行插入
3.因爲當即返回,可能沒法得到插入的主鍵值.