Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wann sollte SQL_NO_CACHE verwendet werden?

SQL_NO_CACHE

Fügen Sie einfach SQL_NO_CACHE nach dem SELECT-Teil der SELECT-Anweisung und vor der Feldliste hinzu. Die erste Abfrage unten verwendet den Abfrage-Cache, wenn er aktiviert ist und die Abfrage zwischengespeichert wird:

SELECT * FROM table WHERE search= 'keyword'; //lets take 1ms

Die zweite Abfrage unten verwendet den Abfrage-Cache nicht:

SELECT SQL_NO_CACHE * FROM table WHERE search= 'keyword'; //lets take ~0.2ms at 2nd time

Dies ist besonders nützlich beim Benchmarking einer Abfrage; Wenn der Abfrage-Cache aktiviert ist, obwohl die erste Abfrage einige Zeit dauern kann, erfolgen die zweite und nachfolgende Abfragen fast sofort. Mit der Verwendung von SQL_NO_CACHE können Sie sicher sein, dass der Abfrage-Cache nicht verwendet wird, und können Ergebniszeiten sicher vergleichen. Der SQL_NO_CACHE-Hinweis schaltet den integrierten Abfrage-Caching-Mechanismus von MySQL für eine bestimmte Abfrage aus. Sie können MySQL dabei helfen, den Abfrage-Cache effizienter zu machen, indem Sie diesen Hinweis für Abfragen verwenden, die sehr dynamisch sind (z. B. eine Schlüsselwortsuche oder ein Bericht, der nur nachts ausgeführt wird). Stellen Sie sicher, dass das Abfrage-Caching aktiviert ist, andernfalls ist dies nicht erforderlich Befehl.

was für SQL_CACHE und SQL_NO_CACHE ?

Die Optionen SQL_CACHE und SQL_NO_CACHE wirken sich auf das Zwischenspeichern von Abfrageergebnissen im Abfragecache aus. SQL_CACHE weist MySQL an, das Ergebnis im Abfrage-Cache zu speichern, wenn es cachebar ist und der Wert der Systemvariablen query_cache_type 2 oder DEMAND ist. Bei SQL_NO_CACHE verwendet der Server den Abfragecache nicht. Es überprüft weder den Abfrage-Cache, um festzustellen, ob das Ergebnis bereits zwischengespeichert ist, noch speichert es das Abfrageergebnis. (Aufgrund einer Einschränkung im Parser muss ein Leerzeichen vor und nach dem Schlüsselwort SQL_NO_CACHE stehen; ein Nicht-Leerzeichen wie ein Zeilenumbruch veranlasst den Server, den Abfrage-Cache zu überprüfen, um festzustellen, ob das Ergebnis bereits zwischengespeichert ist.)

NO_CACHE kann meiner Meinung nach verwendet werden, wenn 'CACHE' aktiviert ist und die Daten in der Datenbank dynamisch aktualisiert werden, dh auf den Datencache der Datenbank kann man sich nicht verlassen, z Möglichkeit der Datenänderung

Updates nützlicher Szenarien

1) Erzwingen, dass der Cache zum Testen der Abfragegeschwindigkeit nicht verwendet wird