SQL Server 2025 ile Gelen Yeni JSON Veri Tipi
Kurumsal SQL Server sistemlerinde, yapısal verinin dışına çıkıldığında işler genellikle karmaşıklaşır. JSON gibi yarı yapılandırılmış veri tipleri, uygulama katmanında büyük esneklik sağlasa da; veritabanı katmanında çoğu zaman yalnızca “uyarlama” ile çalıştırılabiliyordu. Bildiğiniz üzere, SQL Server 2016 sürümüyle birlikte JSON desteği sunulmaya başlandı; ancak bu destek, JSON verilerinin nvarchar veri tipi içinde düz metin olarak saklanmasıyla sınırlıydı.
Bu yaklaşım ise beraberinde önemli kısıtlamalar getiriyordu. Çünkü veritabanı motoru, JSON verisini özel bir veri türü olarak değil, yalnızca düz metin biçiminde işliyordu. Sonuç olarak, içerik üzerinde doğrudan indeksleme yapılamıyor, şemaya uygunluk kontrolü sağlanamıyor ve JSON içindeki alanlara doğrudan erişim veya güncelleme gerçekleştirilemiyordu. En basit sorgular bile, metin içinde doğru konumu bulmaya çalışan fonksiyonlar aracılığıyla yürütülmek zorundaydı. OPENJSON, JSON_VALUE, ISJSON gibi işlevler bu noktada büyük kolaylık sağlasa da, aslında veritabanı motorunun JSON’u yerel düzeyde tanımamasının etrafından dolaşan çözümlerdi. Bu nedenle performans, yönetilebilirlik ve veri bütünlüğü açısından bakıldığında, bu yapı sınırlı, dikkat gerektiren ve uzun vadede geçici nitelikte bir çözümdü.
Microsoft, SQL Server 2025 ile bu tabloyu artık kökten değiştiriyor. Yeni sürümde JSON adında özel bir veri tipi mevcut. Bu veri tipi JSON içeriklerini binary formatta saklıyor (2 GB’a kadar), UTF-8 desteği sunuyor ve en önemlisi veritabanı motoru tarafından yerel olarak tanınıyor. Bu sayede, JSON içeriğine alan bazlı erişim yapılabiliyor, modify() fonksiyonu ile bireysel alanlar doğrudan güncellenebiliyor ve JSON alanlarına özel indeksleme ile sorgu performansı ciddi biçimde artırılabiliyor. Kısacası JSON, artık misafir değil, sistemin doğal bir parçası.

SQL Server 2025’in Public Preview sürümü, bu dönüşümü erkenden test etmek isteyen DBA’ler ve geliştiriciler için değerli fırsatlar sunuyor. Siz de bu önizleme sürümünü indirip test etmek isterseniz, Microsoft’un resmi SQL Server 2025 Public Preview sayfasını ziyaret edebilirsiniz.
Bu makalede, JSON veri tipinin sunduğu yenilikleri uygulamalı örneklerle ele alacak; yeni fonksiyonları, sorgu davranışlarını ve indeksleme yeteneklerini ekran çıktılarıyla birlikte inceleyeceğiz.
JSON Veri Tipiyle Tablo Oluşturma ve Veri Ekleme
Aşağıdaki örnekte, order_info sütunu JSON NOT NULL olarak tanımlanarak yalnızca geçerli JSON belgelerinin kabul edileceği bir yapı oluşturulmuştur. Bu yapı sayesinde JSON verisi hem sistem tarafından tanınır hem de şema geçerliliği kontrol edilir. Eski nvarchar yaklaşımının aksine, artık JSON verisi sistemin gerçek bir parçası olarak işlenmektedir.

Yeni oluşturulan Orders tablosuna geçerli JSON içerikleri doğrudan INSERT INTO komutu ile eklenebilir. Aşağıdaki görselde görüldüğü gibi, her bir JSON belgesi kendi yapısal bütünlüğünü koruyarak order_info sütununa yazılıyor. Ayrıca, SQL Server 2025 bu verileri binary formatta sakladığı için günün sonunda hem disk kullanımı optimize edilir hem de sorgulama işlemleri daha hızlı çalışır.

Ayrıca dikkat edilmesi gereken bir diğer konu, veritabanı motorunun artık JSON geçerliliğini de kontrol ediyor olmasıdır. Eğer JSON yapısal olarak hatalıysa, sorgu çalıştırılamaz ve hata alınır. Bu, sistem düzeyinde şema bütünlüğü sağlar.
modify() Fonksiyonu ile Alan Bazlı Değişiklik
SQL Server 2025 ile tanıtılan JSON veri tipi, yalnızca veri erişimini değil, doğrudan güncellemeyi de desteklemektedir. Bu veri tipiyle birlikte gelen modify() metodu sayesinde, JSON içindeki belirli alanlara noktasal erişim sağlanarak doğrudan güncelleme yapılabilir. Bu yaklaşım, önceki sürümlerde nvarchar üzerinde yapılan işlemlerde karşılaşılan metin ayrıştırma, yeniden oluşturma ve hata risklerini büyük ölçüde ortadan kaldırır.
Aşağıdaki örnekte, order_info kolonunda yer alan JSON verisi içerisindeki Quantity alanı sorgulanmaktadır. Bu işlemde, JSON_VALUE fonksiyonu kullanılarak her satırdaki Quantity değeri ayrıştırılır ve ilişkisel tablolarda olduğu gibi sütun biçiminde dışarıya aktarılır.

Bir önceki adımda sorguladığımız Quantity alanı, artık modify() metodu kullanılarak doğrudan güncellenebilir. SQL Server 2025 ile gelen JSON veri tipinin sağladığı bu yenilik sayesinde, geleneksel metin bazlı işlemler yerine alan düzeyinde ve yapısal güncellemeler artık yapılabilmektedir. Aşağıdaki UPDATE sorgusu, order_id değeri 1 olan kayıtta Quantity alanını 1’den 2’ye güncellemektedir.

İşlem tamamlandıktan sonra aynı SELECT sorgusu yeniden çalıştırıldığında, order_id = 1 olan satırda Quantity değerinin 2 olarak güncellendiği görülür. Bu işlem sırasında ne JSON belgesinin tamamı değiştirildi ne de metin düzeyinde bir manipülasyon yapıldı; sadece hedef alana doğrudan müdahale edilerek güncelleme sağlandı.
JSON_CONTAINS() Fonksiyonu ile JSON İçeriğinde Değer Arama
SQL Server 2025 ile birlikte gelen bir diğer dikkat çekici yenilik ise JSON_CONTAINS() fonksiyonudur. Bu fonksiyon sayesinde, JSON veri yapısı içinde belirli bir değerin belirli bir yol üzerinde bulunup bulunmadığını sorgulamak artık çok daha kolay ve performanslı hâle gelmiştir.
Önceki sürümlerde, bir JSON alanı içinde değer aramak için genellikle JSON_VALUE() fonksiyonu ile birlikte WHERE koşulları yazmak gerekirdi. Ancak bu yöntem, özellikle büyük veri kümelerinde performans açısından yeterli olmayabiliyordu. SQL Server 2025’te ise JSON_CONTAINS(), hem daha sade bir sözdizimi sunar hem de JSON indeksleriyle birlikte kullanıldığında ciddi sorgu hızlanmaları sağlar.
Aşağıdaki örnekte, order_info sütununda yer alan JSON belgeleri içerisinden, Quantity alanı 2 olan satırlar filtrelenmektedir.

Burada JSON_CONTAINS() fonksiyonu üç parametre şeklinde çalışmaktadır. İlk parametre olarak sorgulanacak JSON verisi (order_info), ikinci parametre olarak aranacak değer ('2'), üçüncü parametre olarak ise kontrol edilecek JSON yolu ('$.Items[*].Qty') belirtilir. Bu yapı sayesinde, JSON içeriğinde belirli bir değerin belirli bir alanda bulunup bulunmadığı kolayca sorgulanabilir.
JSON_CONTAINS() fonksiyonu, yalnızca basit değer kontrolleriyle sınırlı kalmaz; aynı zamanda JSON belgeleri içindeki diziler veya nesneler içerisinde de arama yapabilme yeteneğine sahiptir. Bu fonksiyon, yukarıda belirttiğim üzere özellikle JSON INDEX ile birlikte kullanıldığında, geleneksel metin tarama yerine doğrudan indeks üzerinden çalıştığı için sorgu performansında ciddi bir artış sağlar. Bu yönüyle, JSON_VALUE ile yapılan filtreleme işlemlerine göre çok daha verimli ve ölçeklenebilir bir çözüm sunmaktadır. Ayrıca JSON_CONTAINS() yalnızca yeni JSON veri tipiyle değil, nvarchar türünde saklanan geçerli JSON verilerle de çalışabilir; ancak maksimum performans ve indeks desteği elde etmek için JSON veri tipiyle birlikte kullanılması önerilmektedir.
SQL Server 2025 ile JSON Index Kullanımı
SQL Server 2025 ile birlikte gelen en önemli performans yeniliklerinden biri de JSON INDEX desteğidir. Önceki sürümlerde nvarchar sütunlar içinde saklanan JSON verileri üzerinde indeksleme yapmak oldukça sınırlıydı ve genellikle computed column + persisted + index gibi dolaylı yöntemler gerekiyordu. Artık bu tür yapay çözümler yerine doğrudan JSON alanları üzerinde indeks tanımlamak mümkün.
CREATE JSON INDEX ifadesiyle, bir json veri tipine sahip sütunun içindeki belirli yollar indekslenebilir. Bu sayede JSON_VALUE, JSON_CONTAINS gibi fonksiyonlarla yapılan sorgular, veritabanı motoru tarafından indeks üzerinden yürütülerek ciddi performans kazancı sağlayacaktır.

JSON INDEX, tahmin edebileceğiniz gibi yalnızca json veri tipine sahip sütunlar üzerinde tanımlanabilir. Bu nedenle, eski sürümlerde kullanılan nvarchar tabanlı JSON yapılarında bu yeni indeksleme yöntemi kullanılamaz. Ayrıca, indeksin uygulanacağı tablonun mutlaka bir primary key içermesi gerekir; aksi takdirde CREATE JSON INDEX komutu hata verir. Bir de tabii SQL Server 2025'in bu özelliği hâlâ geliştirilmekte olan bir yenilik olduğu için, indeksler yalnızca offline modda oluşturulabilmektedir. Bu da indeks oluşturma süresince ilgili tabloya erişimin geçici olarak engellenebileceği anlamına gelir. Şu an için yalnızca JSON_VALUE ve JSON_CONTAINS gibi belirli fonksiyonlarla uyumlu çalışmaktadır; dolayısıyla tüm JSON işlemleri bu indeks tarafından hızlandırılamaz.

JSON INDEX desteği sayesinde, özellikle büyük veri hacmine sahip sistemlerde JSON alanlarına yönelik sorgular çok daha hızlı ve verimli hâle gelir. Daha önce metin taramasına dayalı olarak çalışan WHERE koşulları, artık doğrudan index seek ile yürütülebilir. Bu durum, işlem süresini azaltırken sistem kaynaklarını da daha verimli kullanmanızı sağlar. Ayrıca, önceki sürümlerde ihtiyaç duyulan computed column ve persisted yapılarına gerek kalmadığı için, hem kod sadeleşir hem de bakım kolaylaşır. JSON INDEX, yarı yapılandırılmış verilerin ilişkisel veri tabanlarında gerçek anlamda optimize şekilde kullanılmasının önünü açacak gibi görünüyor.
En nihayetinde SQL Server 2025 ile gelen yerel JSON veri tipi ve buna eşlik eden fonksiyonel yenilikler, yarı yapılandırılmış verilerin veritabanı düzeyinde yönetimini artık çok daha doğal, güvenli ve performanslı bir hâle getiriyor. modify(), JSON_CONTAINS() ve JSON INDEX gibi yetenekler, yalnızca geliştiricilere daha temiz kod yazma imkânı sunmakla kalmıyor; aynı zamanda sorgu performansını da gözle görülür biçimde iyileştiriyor. Kurumsal sistemlerde JSON’un bir “geçici çözüm” değil, doğrudan desteklenen bir veri modeli olarak yer alması; veri mimarisi açısından önemli bir dönüm noktası anlamına geliyor. Önümüzdeki dönemde SQL Server’ın JSON desteği daha da olgunlaştıkça, hem veri esnekliği hem de analitik kabiliyetleri açısından çok daha güçlü senaryolar mümkün olacak gibi görünüyor.

