Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_STORAGE_FREE () - Tìm hiểu Dung lượng lưu trữ được giải phóng sau khi cập nhật tài liệu JSON trong MySQL

Trong MySQL, JSON_STORAGE_FREE() hàm cho biết dung lượng lưu trữ đã được giải phóng sau khi cập nhật Tài liệu JSON.

Đối với giá trị cột JSON, nó cho biết lượng không gian lưu trữ đã được giải phóng trong biểu diễn nhị phân của nó sau khi được cập nhật tại chỗ bằng cách sử dụng JSON_SET() , JSON_REPLACE() hoặc JSON_REMOVE() .

Đối với tài liệu JSON (hoặc một chuỗi có thể được phân tích cú pháp thành một), hàm này trả về 0 .

Cú pháp

Cú pháp như sau:

JSON_STORAGE_FREE(json_val)

Ở đâu json_val đại diện cho tài liệu JSON để trả về số lượng byte được giải phóng sau khi cập nhật. Đây có thể là một tên cột. Nó cũng có thể là một tài liệu JSON hợp lệ hoặc một chuỗi có thể được phân tích cú pháp thành một — dưới dạng giá trị chữ hoặc dưới dạng giá trị của biến người dùng — trong trường hợp này, hàm trả về 0 .

Ví dụ

Chúng tôi chạy một truy vấn:

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Và lấy dữ liệu sau:

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

Hãy kiểm tra kích thước lưu trữ của Contents và xem liệu có bất kỳ dung lượng nào đã được giải phóng bằng bản cập nhật hay không.

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

Kết quả:

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

Trong trường hợp này, dữ liệu sử dụng hết 40 byte dung lượng lưu trữ và không có dung lượng nào được giải phóng bởi bất kỳ bản cập nhật nào.

Nhưng chúng ta có thể thay đổi điều đó.

Hãy cập nhật.

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

Kết quả:

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

Hãy chạy một truy vấn khác để xem dữ liệu được cập nhật.

SELECT Contents 
FROM Collections 
WHERE CollectionId = 4;

Kết quả:

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

Vì vậy, giá trị "True" đã được đổi thành 1 .

Bây giờ, hãy xem có bao nhiêu dung lượng đã được giải phóng với bản cập nhật đó.

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

Kết quả:

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

Kết quả này cho thấy rằng đã xảy ra cập nhật một phần tài liệu JSON và điều này giải phóng 5 byte dung lượng lưu trữ. Kết quả được trả về bởi JSON_STORAGE_SIZE() không thay đổi bởi bản cập nhật một phần.

Cập nhật một phần được hỗ trợ cho các bản cập nhật bằng JSON_SET() , JSON_REPLACE() hoặc JSON_REMOVE() .

Cập nhật không từng phần

Việc gán trực tiếp giá trị cho một cột JSON không thể được cập nhật một phần và do đó, điều này sẽ dẫn đến không có dung lượng giải phóng nào được báo cáo.

Điều này cũng đúng với biến người dùng JSON.

Đây là một ví dụ để chứng minh.

Đầu tiên, chúng tôi đặt biến:

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

Kết quả:

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

Bây giờ chúng tôi cập nhật biến bằng cách sử dụng JSON_SET() :

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

Kết quả:

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

Vì vậy, trong trường hợp này không có không gian nào được giải phóng. Tuy nhiên, cũng lưu ý rằng JSON_STORAGE_SIZE() bây giờ hàm báo cáo số byte thấp hơn (35) được sử dụng để lưu trữ tài liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sự khác biệt giữa khóa chính và khóa duy nhất

  2. Kết xuất MySQL theo truy vấn

  3. Không thể khởi động mùa xuân để tự động tạo giản đồ cơ sở dữ liệu

  4. Ví dụ về MAKETIME () - MySQL

  5. Sử dụng Cố vấn Sao lưu Cơ sở dữ liệu để Tự động hóa Nhiệm vụ Bảo trì