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) की कम संख्या की रिपोर्ट करता है।