Der MySQL-Abfrage-Cache speichert zuvor ausgeführte Anweisungen im Speicher, obwohl er in MySQL 5.7 veraltet ist (und in 8.0 entfernt wurde): Mit anderen Worten: Der Abfrage-Cache speichert normalerweise SELECT-Anweisungen im Speicher der Datenbank. Wenn wir also eine Abfrage ausführen und einige Zeit später genau dieselbe Abfrage erneut ausführen, werden die Ergebnisse schneller zurückgegeben, da sie aus dem Speicher und nicht von der Festplatte abgerufen werden.
Der Abfrage-Cache speichert Abfragen und Ergebnismengen zwischen. Wenn wir also dieselbe Abfrage ausführen, werden die zwischengespeicherten Abfrageergebnisse sofort zurückgegeben. Die Größe des Abfragecaches kann durch Festlegen der Systemvariablen query_cache_size gesteuert werden. Es gibt jedoch eine Einschränkung: Wenn Abfragen den Abfragecache verwenden sollen, müssen sie Byte für Byte identisch sein. Das heißt, auch wenn Sie der Meinung sind, dass diese beiden Abfragen genau auf die gleiche Weise zwischengespeichert werden sollten:
SELECT * FROM demo_table WHERE columns = 'Demo';
SELECT * FROM demo_table WHERE column = 'Demo';
select * from demo_table where column = 'Demo';
事实上,他们不是。如果 MySQL 查询缓存要求所有查询必须完全相同,那么即使只有一个字节不同,也不会返回任何结果。
所以,总结一下,当 MySQL 执行语句时,它做的第一件事就是检查是否启用了查询缓存(如果需要复习,请回到我们上一篇关于慢速 MySQL 查询的博客文章。)如果查询缓存启用后,MySQL 将首先检查与该查询的任何相关匹配项;如果没有匹配项,MySQL 将继续下一步。若匹配项存在重复,MySQL会从查询缓存中返回结果。
在此之前返回比赛,MySQL的查询缓存要求MySQL的确认:d OES该用户有必要的权限才能完成这样的动作?我应该拒绝执行查询吗?
以下是 MySQL 检查的权限列表:
特权 |
简要说明 |
---|---|
ALL |
赋予特定 MySQL 用户所有权限。 |
SELECT |
授予特定 MySQL 用户从指定数据库中选择行的权限。 |
UPDATE |
授予特定 MySQL 用户更新指定表中现有行的权限。 |
SHOW DATABASES |
使特定 MySQL 用户能够获取存在于一个特定 MySQL 实例中的所有 MySQL 数据库的列表。 |
USAGE select * from demo_table where columns = ' Demo';
|
Tatsächlich sind sie es nicht. Wenn der MySQL-Abfragecache erfordert, dass alle Abfragen identisch sind, werden keine Ergebnisse zurückgegeben, selbst wenn sie sich nur um ein Byte unterscheiden. |
Vor der Rückkehr zum Match benötigt der MySQL-Abfrage-Cache eine Bestätigung von MySQL: d OES Verfügt dieser Benutzer über die erforderlichen Berechtigungen, um eine solche Aktion auszuführen? Soll ich die Ausführung der Abfrage verweigern?
Privilegien | Kurze Beschreibung | |
---|---|---|
Gibt alle Berechtigungen an einen bestimmten MySQL-Benutzer. | SELECT |
|
UPDATE |
Gewährt einem bestimmten MySQL-Benutzer die Berechtigung, vorhandene Zeilen in der angegebenen Tabelle zu aktualisieren. | |
DATENBANKEN ANZEIGEN |
Ermöglicht einem bestimmten MySQL-Benutzer, eine Liste aller MySQL-Datenbanken abzurufen, die in einer bestimmten MySQL-Instanz vorhanden sind. | |
Gibt dem Benutzer die Möglichkeit, nur MySQL zu verwenden, was bedeutet, dass der Benutzer darin keine Abfragen ausführen kann. Im Wesentlichen gleichbedeutend mit keinem Privileg. | ||
Prioritätsidentifikation | ||
MYSQL-Status | Erklärung |
Wenn wir in der Abfrage eine Variable verwenden, sei es im Funktions- oder Partitionsstatus, wird der Abfragecache ungültig. Wenn es sich beispielsweise um große Datenmengen handelt und wir mit SELECT ... INTO OUTFILE einen großen Datensatz in MySQL laden, werden die Ergebnisse ebenfalls nicht zwischengespeichert. Normalerweise funktioniert der Abfragecache nicht, wenn Abfragen wie SELECT ... [LOCK | Es gibt eine Inkrementspalte mit AUTO_INCREMENT, und wir führen eine Abfrage wie diese aus, also:
SELECT * FROM demo_table WHERE increment IS NULL;
Der Abfragecache wird ebenfalls nicht wirksam.
Sie haben Recht, all diese Funktionen können bei manchen Menschen das Gefühl geben, dass sie nutzlos sind. Obwohl der Abfrage-Cache wie andere Funktionen in MySQL seine eigenen Einschränkungen hat und daher nicht immer funktioniert. Zusätzlich zu den oben genannten funktioniert es nicht, wenn die Anweisung Warnungen generiert oder wenn die Anweisung auf einer Tabelle mit TEMPORARY-Speicher-Engine ausgeführt wird, und in einigen anderen Eckfällen. Jedes Mal, wenn jemand etwas in die Tabelle schreibt, wird auch der Abfragecache geleert.
Die Funktionalität des Abfragecaches hängt auch vom Parameter query_cache_size ab. Je größer dieser Parameter ist, desto besser. Bitte beachten Sie jedoch, dass dieser Parameter stark von Ihrem Gedächtnis abhängt. Beachten Sie, dass die Grundstruktur des Abfragecaches standardmäßig mindestens 40 KB Speicherplatz erfordert und der Standardwert zwischen 1 MB und 16 MB liegen kann. Wenn Ihre Datenbank häufig Daten liest, kann die Erhöhung des Parameterwerts dabei helfen, die beste Lösung zu finden, aber experimentieren Sie noch einmal.
Sie können die Anweisung „RESET QUERY CACHE“ verwenden, um den gesamten Inhalt des Abfragecaches zu löschen. Wenn Sie eine Anweisung wie FLUSH TABLES verwenden, werden auch alle Abfrage-Cache-Werte gelöscht.
MySQL ermöglicht es Ihnen sogar, zu sehen, wie viele Abfragen im Abfragecache gespeichert sind, indem Sie die Abfrage ausführen:
SHOW STATUS LIKE 'Qcache_queries_in_cache%';
Sie erhalten Ergebnisse, die wie folgt aussehen:
MySQL:
+-------------------------+--------+
| Variable_name | Value |
+-------------------------+--------+
| Qcache_queries_in_cache | 1 |
+-------------------------+--------+
In diesem Fall können wir unsere The sehen Der Abfrage-Cache speichert derzeit ein Ergebnis zwischen. Führen Sie eine Anweisung wie FLUSH TABLES aus und alle Werte verschwinden.
Das obige ist der detaillierte Inhalt vonWas sind die Grundkenntnisse zum Abfrage-Caching in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!