2011-12-25 9 views
10

MySQL ci consente di creare istruzioni di selezione con l'utilizzo delle opzioni SQL_CACHE e SQL_NO_CACHE. Queste opzioni influiscono sulla memorizzazione nella cache dei risultati della query nella cache delle query. Ma per quale query è meglio usare l'opzione SQL_CACHE e per la quale SQL_NO_CACHE? O forse è meglio non usarlo affatto?Best practice MySQL per utilizzare SQL_CACHE e SQL_NO_CACHE

risposta

12

Generalmente, non dovresti doverlo usare affatto. SQL_CACHE è necessario solo se le query non vengono memorizzate nella cache per impostazione predefinita, che sono nella configurazione predefinita. SQL_NO_CACHE è utile se si conosce che una particolare query non verrà più utilizzata nel prossimo futuro, specialmente se il set di risultati è ampio. L'obiettivo è evitare di ingombrare la cache con risultati che non saranno più necessari.

+2

In particolare per quanto riguarda SQL_NO_CACHE, utilizzare questo in cui il caching del risultato non crea un vantaggio per il riutilizzo successivo. La ragione per cui dovresti farlo è che se hai molte query che memorizzano nella cache ma non vengono mai utilizzate, rallenterai mySQL perché spende sempre più tempo a gestire la cache in modo non appropriato. Ciò diventa particolarmente evidente quando le persone impostano dimensioni query_cache molto grandi mentre il tempo di svuotare le voci vecchie aumenta con le dimensioni. Questo è il motivo per cui esiste l'opzione 0,1,2 per modificare il comportamento di query_cache in mySQL. – Ross

+0

@ Michael, in realtà il configuratino consigliato per i server di produzione è di disattivare ** la cache di query **. – Pacerier

+0

@Pacerier Dipende molto dal carico di lavoro. –

3

Uso SQL_NO_CACHE durante il debug della velocità della query.

+0

Si prega di elaborare. – Pacerier

+0

Quando si testano le query, è utile misurare il loro tempo di esecuzione, senza che vengano recuperate dalla cache. Il recupero dalla cache è molto più rapido del recupero dal database, quindi confrontare i risultati senza sapere se proviene da DB o cache non ha senso. –