SQL'de birkaç temel veri türü vardır — metin türleri (örneğin, VARCHAR, CHAR, TEXT), sayısal türler (INT, DECIMAL, FLOAT), tarihler ve zamanlar (DATE, TIMESTAMP). Belirli veriler için en küçük uygun türü seçmek çok önemlidir, bu şekilde alan tasarrufu sağlar ve indekslemeyi optimize edersiniz. Sık yapılan bir hata, fazla uzun bir tür seçmektir (örneğin, VARCHAR(255) yerine VARCHAR(50)), bu da gereksiz kaynak israfına yol açabilir.
Bir diğer önemli fark, sayısal türlerdir: FLOAT yaklaşık değerleri saklar, DECIMAL ise kesin değerleri saklar, bu finansal işlemler için yararlıdır. Farklı kodlamalardaki dizeleri karşılaştırmak, COLLATE göz önünde bulundurulmadığı takdirde beklenmeyen sonuçlar verebilir.
Örnek:
-- Uyumazlık durumlarıyla çalışmanın bir örneği declare @price varchar(10) = '100.99'; select @price + 1; -- Hata: dize ve sayıyı toplamak mümkün değil -- Türleri açıkça dönüştürmeden çalışmayacak
Soru: VARCHAR türündeki bir alan, bir sayıyla karşılaştırıldığında ne olur? Örneğin: WHERE code = 123? İndeks hızlı bir şekilde çalışır mı?
Cevap: SQL, sayıyı dizeye dönüştürmeye çalışacak ve dizeler olarak karşılaştıracaktır. Ancak bu alan için sayısal bir indeks oluşturulmuşsa, dizelerle karşılaştırıldığında kullanılmayacak ve sorgu yavaşlayacaktır. Her zaman katı veri tipi kullanılması ve gerekiyorsa açık bir dönüştürme yapılması önerilir.
Örnek:
SELECT * FROM products WHERE code = '123'; -- İndeks kullanılabilir SELECT * FROM products WHERE code = 123; -- İndeks KULLANILMAZ, full scan mümkün
Hikaye
VARCHAR olarak saklanıyordu. İki yıl sonra ürünleri fiyata göre sıralamak gerektiğinde, sıralamalar yanlış çalıştı ve indeksleme mümkün olmadı. Karmaşık bir göç ve tür dönüştürmeleri gerekti, bu da haftalarca sürdü.Hikaye
FLOAT türünü kullandı. Raporlarda yuvarlamalar nedeniyle uyumsuzluklar ortaya çıktı ve bir yıl sonra bu, ikramiyelerin dağıtımında önemli hatalara yol açtı.Hikaye
Bir girişimin loglarında tarih ve saat VARCHAR olarak kaydediliyordu. Aralıkların hesaplanması gerektiğinde, zamanların her yerde farklı formatlarda olduğunu keşfettik ve hesaplamalar, performansı olumsuz etkileyen zahmetli normalizasyon analizine neden oldu.