Heim  >  Artikel  >  Datenbank  >  Was sind die Grundkenntnisse zum Abfrage-Caching in MySQL?

Was sind die Grundkenntnisse zum Abfrage-Caching in MySQL?

王林
王林nach vorne
2023-05-31 10:35:381745Durchsuche

Was ist Abfrage-Cache?

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的查询缓存要求MySQL的确认:d OES该用户有必要的权限才能完成这样的动作?我应该拒绝执行查询吗?

以下是 MySQL 检查的权限列表:

Um es zusammenzufassen: Wenn MySQL eine Anweisung ausführt, überprüft es zunächst, ob das Abfrage-Caching aktiviert ist (Wenn Sie eine Auffrischung benötigen, schauen Sie sich unseren letzten Blogbeitrag über langsame MySQL-Abfragen an.) Wenn das Abfrage-Caching aktiviert ist Wenn die Option aktiviert ist, prüft MySQL zunächst, ob relevante Übereinstimmungen mit der Abfrage vorliegen. Wenn keine Übereinstimmung vorliegt, fährt MySQL mit dem nächsten Schritt fort. Wenn es doppelte Übereinstimmungen gibt, gibt MySQL die Ergebnisse aus dem Abfragecache zurück.

特权

简要说明
ALL 赋予特定 MySQL 用户所有权限。
SELECT 授予特定 MySQL 用户从指定数据库中选择行的权限。
UPDATE 授予特定 MySQL 用户更新指定表中现有行的权限。
SHOW DATABASES 使特定 MySQL 用户能够获取存在于一个特定 MySQL 实例中的所有 MySQL 数据库的列表。
USAGEselect * 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.
MySQL-interner Abfrage-Cache


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?

Hier ist die Liste der von MySQL überprüften Berechtigungen: PrivilegienALLGewährt bestimmten MySQL-Benutzern die Berechtigung, Zeilen aus der angegebenen Datenbank auszuwählen. USAGE hat mehr Privilegien, aber Sie verstehen, worauf es ankommt. MySQL speichert tabellenbezogene Informationen zusammen mit zwischengespeicherten Abfragen, daher sind Berechtigungen für das Abfrage-Caching von entscheidender Bedeutung. Berechtigungen sind auch deshalb wichtig, weil sie eine der ersten Phasen des MySQL-Ergebnisprüfungsprozesses darstellen. So funktioniert alles: Erklärung

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
🎜1🎜🎜MySQL überprüft die Berechtigungen im Abfragecache. 🎜🎜Zuerst prüft MySQL, ob ein bestimmter Benutzer die Berechtigung hat, auf ein bestimmtes Ergebnis zuzugreifen. 🎜🎜🎜🎜2🎜🎜MySQL überprüft den Abfragecache auf die Abfrage selbst. 🎜🎜Als nächstes beginnt MySQL zu prüfen, ob dieselbe Abfrage im Abfragecache vorhanden ist. Wenn eine Übereinstimmung vorliegt, kehrt MySQL zurück. Wenn nicht, fährt MySQL mit dem nächsten Schritt fort. 🎜🎜🎜🎜3🎜🎜MySQL markiert den Eintrag im Abfragecache als ungültig. 🎜🎜Wenn sich die Tabelle ändert, muss der Abfragecache aktualisiert werden. Daher beschließt MySQL in diesem Schritt, den Eintrag im Abfragecache als ungültig zu markieren. 🎜🎜🎜🎜4🎜🎜Ergebnisse senden. 🎜🎜MySQL sendet das zwischengespeicherte Ergebnis und zeigt es an. 🎜🎜🎜🎜5🎜🎜 Ergebnisse im Cache speichern. 🎜🎜MySQL speichert Abfrageergebnisse im Abfragecache. 🎜🎜🎜🎜6🎜🎜Der Abfragecache ist gesperrt. 🎜🎜Der Caching-Vorgang ist nun abgeschlossen – MySQL sperrt den Abfrage-Cache. 🎜🎜🎜🎜

„MySql hat keinen Cache!“: Hängt davon ab, ob der Abfragecache beschädigt ist?

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen