2014-07-11 167 views
7

是否可以在命令行(在Linux中)爲類似於nice命令的MySQL中的查詢分配較低的優先級?如果沒有,有沒有可以做類似這樣的事情的數據庫?Mysql中的低優先級查詢

+0

你想解決哪個問題? – VMai

+0

MySQL得到了相反的結果:_HIGH_PRIORITY賦予SELECT更高的優先級,而不是更新表的語句。您應該只用於查詢速度非常快且必須立即完成的查詢。即使有更新語句正在等待表空閒,在表被鎖定以便讀取時仍會執行SELECT HIGH_PRIORITY查詢。這隻會影響只使用表級鎖定的存儲引擎(如MyISAM,MEMORY和MERGE)._ source:[SELECT]的手冊頁(https://dev.mysql.com/doc/refman/5.6/en /select.html) – VMai

回答

11

您可以使用取決於查詢的類型在查詢的LOW_PRIORITYHIGH_PRIORITY你執行:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] INTO ... 
SELECT [HIGH_PRIORITY] * FROM ... 
UPDATE [LOW_PRIORITY] table ... 

Mysql 5.7 documentationINSERT查詢,例如:

如果使用LOW_PRIORITY關鍵字,INSERT的執行被延遲,直到沒有其他客戶端正在從表中讀取。這包括其他客戶端在現有客戶端正在讀取時開始閱讀,而INSERT LOW_PRIORITY語句正在等待。因此,發佈INSERT LOW_PRIORITY語句的客戶端可能會等待很長時間。

但它也說:

這會影響只使用表級鎖只存儲引擎(如MyISAM,MEMORY和MERGE)

所以,你贏了」例如,除非您想使用LOCK_TABLES,並因此降低其性能,否則可以使用此功能性,例如innodb

+0

我[只是在dba stackexchange上閱讀](http://dba.stackexchange.com/a/56379/8378),如果您的數據庫始終處於正常運行狀態,LOW_PRIORITY查詢可能永遠不會運行HIGH_PRIORITY查詢......讓我們思考! –

+0

這個答案指出你可以使用LOW_PRIORITY來進行INSERT,SELECT和UPDATE。至少從MySQL 5.7開始,此選項不適用於SELECT語句。請參閱https://dev.mysql.com/doc/refman/5.7/en/select.html – ChrisInEdmonton

+0

@ChrisInEdmonton謝謝,我更正了我的答案。 'SELECT'查詢中不能使用'LOW_PRIORITY'(而不僅僅是5.7),[但是'HIGH_PRIORITY'是](https://dev.mysql.com/doc/refman/5.7/en/select.html) – julienc