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

JSON_STORAGE_FREE() – Finden Sie heraus, wie viel Speicherplatz nach einer Aktualisierung eines JSON-Dokuments in MySQL freigegeben wurde

In MySQL der JSON_STORAGE_FREE() Funktion zeigt an, wie viel Speicherplatz freigegeben wurde, nachdem ein JSON-Dokument aktualisiert wurde.

Für einen JSON-Spaltenwert zeigt es, wie viel Speicherplatz in seiner binären Darstellung freigegeben wurde, nachdem er mit JSON_SET() an Ort und Stelle aktualisiert wurde , JSON_REPLACE() , oder JSON_REMOVE() .

Für ein JSON-Dokument (oder einen String, der als eins geparst werden kann) gibt diese Funktion 0 zurück .

Syntax

Die Syntax lautet wie folgt:

JSON_STORAGE_FREE(json_val)

Wobei json_val stellt das JSON-Dokument dar, für das die Menge der nach einer Aktualisierung freigegebenen Bytes zurückgegeben werden soll. Dies kann ein Spaltenname sein. Es kann auch ein gültiges JSON-Dokument oder eine Zeichenfolge sein, die als eins geparst werden kann – entweder als Literalwert oder als Wert einer Benutzervariablen – in diesem Fall gibt die Funktion 0 zurück .

Beispiel

Wir führen eine Abfrage aus:

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Und erhalten Sie die folgenden Daten:

+-------------------------------------+
| Contents                            |
+-------------------------------------+
| {"Name": "Homer", "Stupid": "True"} |
+-------------------------------------+

Lassen Sie uns die Speichergröße der Contents überprüfen Spalte und prüfen Sie, ob durch ein Update Speicherplatz freigegeben wurde.

SELECT 
  JSON_STORAGE_SIZE(Contents) Size,
  JSON_STORAGE_FREE(Contents) Free
FROM Collections
WHERE CollectionId = 4;

Ergebnis:

+------+------+
| Size | Free |
+------+------+
|   40 |    0 |
+------+------+

In diesem Fall verbrauchen die Daten 40 Byte Speicherplatz, und es wurde kein Speicherplatz durch Aktualisierungen freigegeben.

Aber das können wir ändern.

Lass uns ein Update machen.

UPDATE Collections
SET Contents = JSON_SET(Contents, "$.Stupid", 1)
WHERE CollectionId = 4;

Ergebnis:

Query OK, 1 row affected (0.08 sec)
Rows matched: 1  Changed: 1  Warnings: 0

Lassen Sie uns eine weitere Abfrage ausführen, um die aktualisierten Daten anzuzeigen.

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Ergebnis:

+--------------------------------+
| Contents                       |
+--------------------------------+
| {"Name": "Homer", "Stupid": 1} |
+--------------------------------+

Also der Wert "True" wurde in 1 geändert .

Sehen wir uns nun an, wie viel Speicherplatz durch dieses Update freigegeben wurde.

SELECT 
  JSON_STORAGE_SIZE(Contents) Size,
  JSON_STORAGE_FREE(Contents) Free
FROM Collections
WHERE CollectionId = 4;

Ergebnis:

+------+------+
| Size | Free |
+------+------+
|   40 |    5 |
+------+------+

Dieses Ergebnis zeigt, dass eine teilweise Aktualisierung des JSON-Dokuments stattgefunden hat und dass dadurch 5 Byte Speicherplatz freigegeben wurden. Das von JSON_STORAGE_SIZE() zurückgegebene Ergebnis wird durch das partielle Update nicht verändert.

Teilaktualisierungen werden für Aktualisierungen mit JSON_SET() unterstützt , JSON_REPLACE() , oder JSON_REMOVE() .

Nicht teilweise Aktualisierungen

Die direkte Zuweisung eines Werts zu einer JSON-Spalte kann nicht teilweise aktualisiert werden, weshalb dies dazu führt, dass kein freigegebener Speicherplatz gemeldet wird.

Dasselbe gilt für eine JSON-Benutzervariable.

Hier ist ein Beispiel zur Veranschaulichung.

Zuerst setzen wir die Variable:

SET @data = '{"Name": "Homer", "Stupid": "True"}';
SELECT 
  JSON_STORAGE_SIZE(@data) Size,
  JSON_STORAGE_FREE(@data) Free;

Ergebnis:

+------+------+
| Size | Free |
+------+------+
|   40 |    0 |
+------+------+

Jetzt aktualisieren wir die Variable mit JSON_SET() :

SET @data = JSON_SET(@data, "$.Stupid", 1);
SELECT 
  JSON_STORAGE_SIZE(@data) Size,
  JSON_STORAGE_FREE(@data) Free;

Ergebnis:

+------+------+
| Size | Free |
+------+------+
|   35 |    0 |
+------+------+

In diesem Fall wurde also kein Platz freigegeben. Beachten Sie jedoch auch, dass JSON_STORAGE_SIZE() Die Funktion meldet jetzt die niedrigere Anzahl von Bytes (35), die zum Speichern des Dokuments verwendet werden.