程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL INSERT DELAYED,mysqldelayed

MySQL INSERT DELAYED,mysqldelayed

編輯:MySQL綜合教程

MySQL INSERT DELAYED,mysqldelayed


INSERT DELAYED 語法

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    VALUES ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

 

用於INSERT語句的DELAYED選項是MySQL相對於標准SQL的擴展。如果您的客戶端不能等待INSERT完成,則這個選項是非常有用的。當您使用MySQL進行日志編寫時,這是非常常見的問題。您也可以定期運行SELECT和UPDATE語句,這些語句花費的時間較長。

當一個客戶端使用INSERT DELAYED時,會立刻從服務器處得到一個確定。並且行被排入隊列,當表沒有被其它線程使用時,此行被插入。

使用INSERT DELAYED的另一個重要的好處是,來自許多客戶端的插入被集中在一起,並被編寫入一個塊。這比執行許多獨立的插入要快很多。

使用DELAYED時有一些限制:

注意,目前在隊列中的各行只保存在存儲器中,直到它們被插入到表中為止。這意味著,如果您強行中止了mysqld(例如,使用kill -9)或者如果mysqld意外停止,則所有沒有被寫入磁盤的行都會丟失。

以下詳細描述了當您對INSERT或REPLACE使用DELAYED選項時會發生什麼情況。在這些描述中,“線程”指的是已接受了一個INSERT DELAYED語句的線程,“管理程序”指的是為某個特定的表處理所有INSERT DELAYED語句的線程。

注意,如果有一個INSERT DELAYED管理程序正在運行,則這意味著INSERT DELAYED語句比常規的INSERT語句具有更高的優先權。其它更新語句必須等待,直到INSERT DELAYED語句隊列都運行完畢,或者管理程序線程被中止(使用KILL thread_id),或者執行了一個FLUSH TABLES時為止。

以下狀態變量提供了有關INSERT DELAYED語句的信息:

狀態變量

意義

Delayed_insert_threads

管理程序線程的數目

Delayed_writes

使用INSERT DELAYED寫入的行的數目

Not_flushed_delayed_rows

等待被寫入的行的數目

您可以通過發送一個SHOW STATUS語句,或者執行一個mysqladmin extended-status命令,來閱覽這些變量。

注意,當沒有使用表時,INSERT DELAYED比常規的INSERT要慢。對於服務器來說,為每個含有延遲行的表操縱一個獨立的線程,也是一個額外的系統開銷。這意味著只有當您確認您需要時,才應使用INSERT DELAYED。

 

文章轉載來自:http://dev.mysql.com/doc/refman/5.6/en/insert-delayed.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved