تا قبل از SQL Server 2025، اگر می خواستیم داده های JSON را در SQL Server ذخیره کنیم، معمولاً از nvarchar(max) یا varchar(max) استفاده می کردیم.
این روش کار می کرد، اما یک مشکل مهم داشت:
- SQL Server JSON را به صورت متن عادی ذخیره می کرد، نه به صورت ساخت یافته و بومی.
در SQL Server 2025 و نسخه های بعدی، نوع داده ی بومی برای JSON معرفی شده که این محدودیت را تا حد زیادی برطرف می کند. این تغییر مهم باعث می شود ذخیره سازی، اعتبارسنجی و در برخی سناریوها حتی جست وجو روی JSON بهتر و سریع تر انجام شود.
چرا JSON بومی مهم است؟
در روش قدیمی، اگر داده ی JSON اشتباه وارد می کردیم، SQL Server لزوماً جلوی آن را نمی گرفت.
مثلاً اگر یک JSON ناقص یا با syntax اشتباه داخل یک ستون nvarchar(max) ذخیره می شد، دیتابیس آن را فقط به عنوان متن می دید. البته می شد از تابع ISJSON برای بررسی صحت JSON استفاده کرد، اما این تابع فقط می گفت:
- 1 یعنی معتبر است
- 0 یعنی نامعتبر است
- ISJSON محل خطا را مشخص نمی کرد
مزیت اصلی نوع داده JSON:
وقتی از نوع داده JSON استفاده می کنیم، خود SQL Server قبل از ذخیره سازی، ساختار JSON را بررسی می کند. اگر فرمت درست نباشد، داده ذخیره نمی شود و خطا می گیریم.
این یعنی:
- از ذخیره شدن JSON خراب جلوگیری می شود
- اعتبارسنجی به صورت native انجام می شود
- خطاها شفاف تر و دقیق تر گزارش می شوند
- مثلاً اگر یک JSON ناقص یا بدفرمت وارد کنیم، SQL Server خطایی مثل این می دهد:
> JSON text is not properly formatted
این رفتار برای سیستم های تولیدی خیلی مهم است، چون مانع ورود داده ی آلوده به لایه ذخیره سازی می شود.
آیا JSON بومی سریع تر هم هست؟
داده ی JSON به صورت native binary ذخیره می شود، SQL Server برای بعضی عملیات ها عملکرد بهتری دارد.
نقش JSON Index:
ایندکس گذاری روی JSON می تواند سرعت کوئری هایی را که روی فیلدهای داخل JSON فیلتر می شوند، بیشتر بهبود دهد.
اگر روی ویژگی هایی جست وجو زیاد انجام شود، بدون ایندکس مجبور می شویم کل داده ها را اسکن کنیم. اما با JSON index، SQL Server می تواند مسیر اجرای بهتری انتخاب کند.
باید دقت کرد که فقط استفاده از نوع داده ی JSON به تنهایی معجزه نمی کند. اگر کوئری ها زیاد روی فیلدهای داخل JSON فیلتر یا join انجام می دهند، ایندکس مناسب همچنان حیاتی است.
در واقع بهترین الگو این است:
- داده ی JSON را با نوع JSON ذخیره کنیم
- روی مسیرهای پرتکرار ایندکس بسازیم
- کوئری ها را بر اساس نیاز واقعی سیستم طراحی کنیم
سید حامد واحدی
2 مرداد 1405