sql >> Databáze >  >> RDS >> Mysql

JSON_STORAGE_FREE() – Zjistěte, kolik úložného prostoru bylo uvolněno po aktualizaci dokumentu JSON v MySQL

V MySQL je to JSON_STORAGE_FREE() ukazuje, kolik úložného prostoru bylo uvolněno po aktualizaci dokumentu JSON.

U hodnoty sloupce JSON ukazuje, kolik úložného prostoru bylo uvolněno v jeho binární reprezentaci poté, co byla aktualizována na místě pomocí JSON_SET() , JSON_REPLACE() nebo JSON_REMOVE() .

U dokumentu JSON (nebo řetězce, který lze analyzovat jako jeden) tato funkce vrátí 0 .

Syntaxe

Syntaxe vypadá takto:

JSON_STORAGE_FREE(json_val)

Kde json_val představuje dokument JSON, pro který se má vrátit množství bajtů uvolněných po aktualizaci. Může to být název sloupce. Může to být také platný dokument JSON nebo řetězec, který lze analyzovat jako jeden – buď jako doslovnou hodnotu, nebo jako hodnotu uživatelské proměnné – v takovém případě funkce vrátí 0 .

Příklad

Spustíme dotaz:

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

A získejte následující data:

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

Pojďme zkontrolovat velikost úložiště Contents a zjistěte, zda se aktualizací uvolnilo místo.

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

Výsledek:

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

V tomto případě data využívají 40 bajtů úložného prostoru a žádné místo nebylo uvolněno žádnými aktualizacemi.

Ale můžeme to změnit.

Pojďme provést aktualizaci.

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

Výsledek:

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

Spusťte další dotaz, abyste viděli aktualizovaná data.

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Výsledek:

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

Tedy hodnotu "True" byl změněn na 1 .

Nyní se podívejme, kolik místa se touto aktualizací uvolnilo.

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

Výsledek:

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

Tento výsledek ukazuje, že došlo k částečné aktualizaci dokumentu JSON a že se tím uvolnilo 5 bajtů úložného prostoru. Výsledek vrácený JSON_STORAGE_SIZE() je po částečné aktualizaci nezměněn.

U aktualizací pomocí JSON_SET() jsou podporovány částečné aktualizace , JSON_REPLACE() nebo JSON_REMOVE() .

Nečástečné aktualizace

Přímé přiřazení hodnoty ke sloupci JSON nelze částečně aktualizovat, a proto nebude hlášeno žádné volné místo.

Totéž platí pro uživatelskou proměnnou JSON.

Zde je příklad k demonstraci.

Nejprve nastavíme proměnnou:

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

Výsledek:

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

Nyní aktualizujeme proměnnou pomocí JSON_SET() :

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

Výsledek:

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

V tomto případě tedy nebylo uvolněno žádné místo. Všimněte si však také, že JSON_STORAGE_SIZE() funkce nyní hlásí nižší počet bajtů (35) použitých k uložení dokumentu.


  1. fe_sendauth:nebylo zadáno žádné heslo

  2. GROUP BY / zmatek agregačních funkcí v SQL

  3. Jednoduché uvozovky, dvojité uvozovky a zpětné uvozovky v MySQL

  4. Jak vytvořit průběžný celkový součet klouzavého období