Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_STORAGE_FREE() – Разберете колко място за съхранение е освободено след актуализация на JSON документ в MySQL

В MySQL, JSON_STORAGE_FREE() функцията показва колко място за съхранение е било освободено след актуализиране на JSON документ.

За стойност на колона JSON показва колко място за съхранение е било освободено в неговото двоично представяне, след като е било актуализирано на място с помощта на JSON_SET() , JSON_REPLACE() или JSON_REMOVE() .

За JSON документ (или низ, който може да бъде анализиран като един), тази функция връща 0 .

Синтаксис

Синтаксисът е така:

JSON_STORAGE_FREE(json_val)

Където json_val представлява JSON документа, за който да се върне количеството байтове, освободени след актуализация. Това може да бъде име на колона. Може също да бъде валиден JSON документ или низ, който може да бъде анализиран като един – или като буквална стойност, или като стойност на потребителска променлива – в този случай функцията връща 0 .

Пример

Изпълняваме заявка:

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

И вземете следните данни:

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

Нека проверим размера на съхранение на Contents колона и вижте дали някое място е било освободено от актуализация.

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

Резултат:

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

В този случай данните заемат 40 байта място за съхранение и не е освободено място от никакви актуализации.

Но можем да променим това.

Нека направим актуализация.

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

Резултат:

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

Нека изпълним друга заявка, за да видим актуализираните данни.

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Резултат:

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

Така че стойността "True" е променен на 1 .

Сега нека видим колко място беше освободено с тази актуализация.

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

Резултат:

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

Този резултат показва, че е възникнала частична актуализация на JSON документа и че това е освободило 5 байта място за съхранение. Резултатът, върнат от JSON_STORAGE_SIZE() е непроменен от частичната актуализация.

Поддържат се частични актуализации за актуализации, използващи JSON_SET() , JSON_REPLACE() или JSON_REMOVE() .

Нечастични актуализации

Директното присвояване на стойност на колона JSON не може да бъде частично актуализирано и следователно това ще доведе до отчитане на освободено място.

Същото важи и за потребителска променлива JSON.

Ето пример за демонстрация.

Първо задаваме променливата:

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

Резултат:

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

Сега актуализираме променливата с помощта на JSON_SET() :

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

Резултат:

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

Така че в този случай не беше освободено място. Забележете обаче също, че JSON_STORAGE_SIZE() функцията вече отчита по-малкия брой байтове (35), използвани за съхраняване на документа.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се присъедините към MySQL и Postgres в материализиран изглед на живо

  2. Какво представлява MySQL еквивалентът на STUFF() в SQL Server?

  3. JSON_ARRAY_INSERT() – Вмъкване на стойности в JSON масив в MySQL

  4. MySQLSyntaxErrorException близо до ? когато се опитвате да изпълните PreparedStatement

  5. Вземете най-новата дата от групирани MySQL данни