2014-07-11 18 views
7

È possibile assegnare una priorità inferiore a una query in MySQL simile al comando nice sulla riga di comando (in Linux)? In caso contrario, ci sono database che possono fare qualcosa del genere?Query a bassa priorità in Mysql

+0

Quale problema vuoi risolvere? – VMai

+0

MySQL ha ottenuto il contrario: _HIGH_PRIORITY conferisce alla SELECT una priorità più alta di un'istruzione che aggiorna una tabella. Si dovrebbe usare questo solo per le query che sono molto veloci e devono essere fatte in una sola volta. Una query SELECT HIGH_PRIORITY che viene emessa mentre la tabella è bloccata per la lettura viene eseguita anche se è presente un'istruzione di aggiornamento in attesa che la tabella sia libera. Ciò riguarda solo i motori di memorizzazione che utilizzano solo il blocco a livello di tabella (come MyISAM, MEMORY e MERGE) ._ source: pagina manuale di [SELECT] (https://dev.mysql.com/doc/refman/5.6/en /select.html) – VMai

risposta

11

È possibile utilizzare il LOW_PRIORITY o HIGH_PRIORITY nelle query in base al tipo di query si esegue:

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

Dal Mysql 5.7 documentation per la query INSERT per esempio:

Se si utilizza il Parola chiave LOW_PRIORITY, l'esecuzione di INSERT viene ritardata fino a quando nessun altro client non sta leggendo dalla tabella. Ciò include altri client che hanno iniziato a leggere mentre i client esistenti stanno leggendo e mentre l'istruzione INSERT LOW_PRIORITY è in attesa. È quindi possibile che un client che emette un'istruzione INSERT LOW_PRIORITY attenda per un tempo molto lungo.

Ma è anche detto:

Questo influenza motori di archiviazione solo che utilizzano solo blocco a livello di tabella (come MyISAM, MEMORY, MERGE)

Quindi hai vinto' Per esempio, è possibile utilizzare questa funzionalità con innodb, a meno che non si desideri utilizzare LOCK_TABLES e quindi ridurne le prestazioni.

+0

I [leggi qui sul dba stackexchange] (http://dba.stackexchange.com/a/56379/8378) che una query LOW_PRIORITY non può mai essere eseguita se il tuo DB è sempre occupato in esecuzione normale o Query HIGH_PRIORITY ... quindi spunti di riflessione! –

+0

Questa risposta afferma che è possibile utilizzare LOW_PRIORITY per INSERT, SELECT e UPDATE. A partire da MySQL 5.7, questa opzione non è disponibile per le istruzioni SELECT. Vedi https://dev.mysql.com/doc/refman/5.7/en/select.html – ChrisInEdmonton

+0

@ChrisInEdmonton Grazie, ho corretto la mia risposta. 'LOW_PRIORITY' non è possibile nelle query' SELECT' (e non solo in 5.7), [ma 'HIGH_PRIORITY' è] (https://dev.mysql.com/doc/refman/5.7/en/select.html) – julienc

Problemi correlati