sql >> Databasteknik >  >> RDS >> Mysql

JSON_STORAGE_FREE() – Ta reda på hur mycket lagringsutrymme som frigjordes efter en uppdatering av ett JSON-dokument i MySQL

I MySQL, JSON_STORAGE_FREE() funktionen visar hur mycket lagringsutrymme som frigjordes efter att ett JSON-dokument uppdaterades.

För ett JSON-kolumnvärde visar det hur mycket lagringsutrymme som frigjordes i dess binära representation efter att det uppdaterades på plats med JSON_SET() , JSON_REPLACE() , eller JSON_REMOVE() .

För ett JSON-dokument (eller en sträng som kan tolkas som en), returnerar den här funktionen 0 .

Syntax

Syntaxen ser ut så här:

JSON_STORAGE_FREE(json_val)

Där json_val representerar JSON-dokumentet för vilket mängden byte som frigörs efter en uppdatering ska returneras. Detta kan vara ett kolumnnamn. Det kan också vara ett giltigt JSON-dokument eller en sträng som kan tolkas som ett – antingen som ett bokstavligt värde eller som värdet på en användarvariabel – i vilket fall funktionen returnerar 0 .

Exempel

Vi kör en fråga:

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Och få följande data:

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

Låt oss kontrollera lagringsstorleken för Contents kolumn och se om något utrymme har frigjorts genom en uppdatering.

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

Resultat:

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

I det här fallet använder data upp 40 byte lagringsutrymme och inget utrymme har frigjorts av några uppdateringar.

Men vi kan ändra på det.

Låt oss göra en uppdatering.

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

Resultat:

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

Låt oss köra en annan fråga för att se den uppdaterade informationen.

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Resultat:

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

Så värdet "True" har ändrats till 1 .

Låt oss nu se hur mycket utrymme som frigjordes med den uppdateringen.

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

Resultat:

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

Detta resultat visar att en partiell uppdatering av JSON-dokumentet inträffade och att detta frigjorde 5 byte lagringsutrymme. Resultatet returneras av JSON_STORAGE_SIZE() är oförändrad av den partiella uppdateringen.

Partiella uppdateringar stöds för uppdateringar med JSON_SET() , JSON_REPLACE() , eller JSON_REMOVE() .

Icke-partiella uppdateringar

Den direkta tilldelningen av ett värde till en JSON-kolumn kan inte uppdateras delvis, och därför kommer detta att resultera i att inget ledigt utrymme rapporteras.

Detsamma gäller för en JSON-användarvariabel.

Här är ett exempel att visa.

Först ställer vi in ​​variabeln:

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

Resultat:

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

Nu uppdaterar vi variabeln med JSON_SET() :

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

Resultat:

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

Så i det här fallet frigjordes inget utrymme. Observera dock också att JSON_STORAGE_SIZE() Funktionen rapporterar nu det lägre antalet byte (35) som används för att lagra dokumentet.


  1. Hur redigerar man lagrad procedur i Oracle SQL Developer?

  2. Använder Intel Optane Storage för SQL Server

  3. Måste deklarera den skalära variabeln

  4. MySQL - Rader till kolumner