Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_STORAGE_FREE() — dowiedz się, ile miejsca na dysku zostało zwolnione po aktualizacji dokumentu JSON w MySQL

W MySQL funkcja JSON_STORAGE_FREE() funkcja pokazuje, ile miejsca zostało zwolnione po zaktualizowaniu dokumentu JSON.

W przypadku wartości kolumny JSON pokazuje, ile miejsca do przechowywania zostało zwolnione w jego reprezentacji binarnej po jej zaktualizowaniu za pomocą JSON_SET() , JSON_REPLACE() lub JSON_REMOVE() .

W przypadku dokumentu JSON (lub ciągu, który można przeanalizować jako jeden), ta funkcja zwraca 0 .

Składnia

Składnia wygląda tak:

JSON_STORAGE_FREE(json_val)

Gdzie json_val reprezentuje dokument JSON, dla którego ma zostać zwrócona ilość bajtów zwolnionych po aktualizacji. Może to być nazwa kolumny. Może to być również poprawny dokument JSON lub ciąg znaków, który można przeanalizować jako jeden — jako wartość dosłowną lub jako wartość zmiennej użytkownika — w takim przypadku funkcja zwraca 0 .

Przykład

Uruchamiamy zapytanie:

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

I uzyskaj następujące dane:

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

Sprawdźmy rozmiar pamięci Contents i sprawdź, czy aktualizacja nie zwolniła miejsca.

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

Wynik:

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

W tym przypadku dane zajmują 40 bajtów przestrzeni dyskowej i żadne miejsce nie zostało zwolnione przez jakiekolwiek aktualizacje.

Ale możemy to zmienić.

Zróbmy aktualizację.

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

Wynik:

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

Uruchommy kolejne zapytanie, aby zobaczyć zaktualizowane dane.

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Wynik:

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

Zatem wartość "True" został zmieniony na 1 .

Zobaczmy teraz, ile miejsca zostało zwolnione dzięki tej aktualizacji.

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

Wynik:

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

Ten wynik pokazuje, że nastąpiła częściowa aktualizacja dokumentu JSON, co zwolniło 5 bajtów miejsca do magazynowania. Wynik zwrócony przez JSON_STORAGE_SIZE() nie zmienia się po częściowej aktualizacji.

Aktualizacje częściowe są obsługiwane w przypadku aktualizacji za pomocą JSON_SET() , JSON_REPLACE() lub JSON_REMOVE() .

Aktualizacje nieczęściowe

Bezpośrednie przypisanie wartości do kolumny JSON nie może być częściowo zaktualizowane, a zatem spowoduje to, że nie zostanie zgłoszone zwolnione miejsce.

To samo dotyczy zmiennej użytkownika JSON.

Oto przykład do zademonstrowania.

Najpierw ustawiamy zmienną:

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

Wynik:

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

Teraz aktualizujemy zmienną za pomocą JSON_SET() :

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

Wynik:

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

Więc w tym przypadku nie zwolniono miejsca. Zauważ jednak, że JSON_STORAGE_SIZE() funkcja zgłasza teraz mniejszą liczbę bajtów (35) używanych do przechowywania dokumentu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ile wierszy w bazie danych to ZA DUŻO?

  2. Wprowadzenie do wysokiej dostępności baz danych dla MySQL i MariaDB

  3. Jak sprawdzić stan serwera w MySQL Workbench za pomocą GUI

  4. Instalowanie MySQL na CentOS 7

  5. Baza danych kodów PIN w Indiach ze skryptem lokalizacyjnym w php i jquery