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.