Sorunu evet bence etkiler, hayır bence etkilemez şeklinde değil de nedenleriyle birlikte daha teknik yanıtlamak istiyorum.
Bu sorunun yanıtı; tabloda yapılan optimizasyon çalışmasına göre değişir.
Eğer tabloda index oluşturulmamışsa bu durumda veritabanı motoru senin kayıtlarını ararken tüm veritabanını gezeceği için ve de veritabanı dosya boyutun da bu text alanının içerdiği verilerden dolayı 2. duruma göre daha büyük olduğu için 1. dorgu 2. sorguya göre daha yavaş çalışır, ancak; eğer ki index'ler doğru şekilde oluşturulmuşlarsa bu durumda sql senin her bir kaydının veritabanındaki yerini "bildiği" için aralarında "teorik olarak" fark olmayacaktır.
Bu sorgunu hızlandıracak çok hayati bir geliştirmeden de bahsetmek istiyorum. Mecbur olmadıkça varchar tipi yerine nvarchar tipini kullan çünkü varchar tipinde alanın boyutu kadar yer tabloda saklanır ve sorgu sonuçlarında bu boşluk karakterleri de geri döner. Sen dönmesini istemezsen trim fonksiyonu ile bu alanı çağırabilirsin ancak bu sefer de gereksiz yere bir fonksiyon işlem yaptığı için sorgu yine yavaşlar. Bunun yerine nvarchar veri tipini kullanırsan hem boşluklar veritabanına yazılmadığı ve kayıtları geri çağırırken bu boşluklar da gelmek zorunda olmayacağı için hem de bu boşlukları göstermemek için bir fonksiyon tetiklenmeyeceği için sorgu hızında yine belirgin bir artış olacaktır.
Sorgunun performans sonuçlarını Execution Plan ile inceleyerek arada ne kadar fark olduğuna bakabilirsin.
ilginize tşk ediyorum.
o zaman listelemede gostermeden ziyade kaydın detayına girince gorulecek detay text gibi bilgileri farklı bir tabloda tutmak
yahutta primary indexi yapmak grekıyo sanırım.. ama yinede birkac formdan daha arastırayım
nvarchar konusunda tam tersi diye bılıyorum ayrıca coklu dıl destgı ıcın nvarchar kullanılır dıye bılıyorum
‘VAR’ ifadesi de, tutulan metnin sonundaki boşlukları silmek içindir. Yani datayı tanımlarken parantez içerisinde verdiğimiz boyutu indirgememize yarar. Hemen minik bir örnek üzerinde inceleyelim. ‘DENEME’ ifadesini bu 4 tip ile tuttuğumuzu düşünelim.
CHAR(10) => Data, ‘DENEME ‘ şeklinde tutulur ve 10 byte yer kaplar.
NCHAR(10) => Data, ‘DENEME ‘ şeklinde tutulur ve 20 byte yer kaplar.
VARCHAR(10) => Data ‘DENEME’ şeklinde tutulur ve 6 byte yer kaplar. (datamız 6 karakterden oluşuyor. VAR yazdığımızdan dolayı geriye kalan 4 karakter CHAR tipindeki gibi boşlukla tamamlanmak yerine, görmezden geliniyor. Bu sayede datamız gereğinden fazla yer kaplamamış olur.)
NVARCHAR(10) => Data ‘DENEME’ şeklinde tutulur ve 12 byte yer kaplar.