VARCHAR sütunları içermeyen herhangi bir anlamı var mı?


18

Burada dolaşmakVARCHAR2 , Oracle'daki bir sütunun boyutunun performansı etkileyip etkilemediğini gösteren karışık raporlar gibi görünüyor .

VARCHARBoyutu biraz bükülme sorusu vermek istiyorum ve bu konuda bir fikir edinmek istiyoruz:

Verilen (multiline) serbest metin alanları ( değil bir (Oracle) veritabanında depolamak istediğiniz adları gibi kısa şeyler), herhangi bir nokta (wrt. Performans veya başka bir şekilde) de vardır değil maxing VARCHAR(kapasite VARCHAR2(4000)Oracle üzerine) ancak seçme 1024 veya 512 gibi daha küçük bir değer, çünkü yine de vakaların% 98'inde yeterli olacaktır.


Yanıtlar:


12

Özellikle bir istemci programı bir veri kümesi almak için yeterli bellek ayırması gerektiğinde bellek kullanımını etkiler.

Birçok uygulamanın (özellikle web uygulamaları) çok baytlı bir karakter kümesi olan UTF-8 kullandığını unutmayın. Bu nedenle, bayt yerine karakterleri gerçekten dikkate almalısınız.

Binden fazla karakter bekliyordum, o zaman aktif olarak bir CLOB düşünürdüm. Ben düz metin veya biçimlendirme (wiki / html?), Euro olmayan dillerle kullanım biçimini depolayacak olup olmadığını düşünüyorum. Örneğin, buradaki Sorular ve Cevaplar CLOB olacaktır, ancak yorumlar bir VARCHAR'a sığabilir.

Bir VARCHAR'ı en üst düzeye çıkarırsanız, altı ay içinde biri tekrar büyütmek isteyecek ve bir CLOB kullanmadığınız için kendinizi tekmeleyeceksiniz.


2
UTF-8 genellikle batı dilleri için bir karakter için bir bayt kullanır. Çok baytlı "kaçış" dizilerinin Batı dışı karakterleri temsil etmesine izin vermesi bakımından çok bayttır.
Eric J.

9

Sizin için önemli olabilecek yan konular olmasına rağmen genellikle performansla ilgili herhangi bir husus yoktur . A'nın sınırı, varchardiğerleri gibi bir kısıtlama olarak düşünülmelidir - bir iş kuralını uygulamak vardır.

IMO sormanız gereken soru "Bu alanda saklanan serbest metin verilerinin n bayt / karakterden daha uzun olmasını önlemek ister miyim " - varchar(512)ve arasında seçim yaparken belirleyici olan tek faktördür varchar(4000).

varcharSQL türü hakkında konuştuğunuzu varsayıyorum - durum farklı pl/sqlve uzunluk seçimi bellek ayırma nedenleri için çok önemli olabilir .


Teşekkürler. (Çok sınırlı) deneyimlerime göre, "500 - 3999" arasında bir sınır belirten herhangi bir "iş kuralı" basitçe keyfidir, yani birisi sadece sayıyı sevmiştir. IMHO, eğer serbest metin için gidersem ve hiçbir uygulama sonucu (bu sorunun bağlamı) yoksa, ya maksimum (4000) ya da serbest metin değildir. --- Bu yorumda yapmaya çalıştığım nokta: btw'yi seçmeye yardımcı olacak bir iş kuralı olmayacağını düşünüyorum. 512 ve 4000 (olmadığı sürece: "mümkün olduğu kadar çok karakter")
Martin

Eğer gerçekten "mümkün olduğunca çok karakter" ise, @gary'nin dediği gibi, bir clobdüşünmelisiniz, değil mi?
Jack Douglas

4

Vakaların% 98'inde daha küçük bir değer işe yararsa, ancak Vakaların% 100'ünde çalışmak için bir Varchar2 (4000) gerekir, o zaman daha büyük değeri kullanmaktan başka seçeneğiniz yoktur . Değerlerin% 2'si için ayrı bir tablo oluşturmak ve daha sonra ekler / seçimler vb. Koordine etmek, herhangi bir bellek veya performans avantajını alanın genişletilmemesini engelleyecek karmaşıklık katacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.