2010-02-15 31 views
9

Dizelerden tamsayılara kadar bir harita var. MySQL veritabanında bu haritayı saklamak için aşağıdaki tabloyu oluşturdu:MySQL veritabanının TEXT sütununu dizinlemek için doğru bir yol mu?

CREATE TABLE map(
    Argument TEXT NOT NULL, 
    Image INTEGER NOT NULL 
) 

uzunluğu tahmin edilemez çünkü argüman için METİN tipini seçebilir, şu anda en uzun rekor 2290 karakter vardır ve ortalama uzunluğu 88 karakter olduğunu.

Performans sorunları ile karşılaştıktan sonra Argument sütununa dizin eklemeyi denedim, ancak uzunluğu belirtmem gerektiğini öğrendim, bu nedenle bu sınırlamayı önlemek için karma değerler içeren (md5 veya başka bir) yeni bir tamsayı sütunu ekledim Bağımsız değişken sütun değerleri.

ALTER TABLE map ADD COLUMN ArgumentHash INTEGER; 

Ve performansı ile ilgili problemlerin kayboldu O zamandan beri birleşik endeks

CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80)); 

. Bu sorunu çözmek için doğru bir yol olup olmadığını sormak istiyorum.

cevap

3

"Doğru" bir yol olduğunu sanmıyorum, bunun için kullandığınız şeye bağlı.

Deneyimlerime göre, büyük bir metin sütunu seçmek/seçmek isteyip istemediğiniz sıra dışıdır; metin genellikle başka bir anahtar tarafından alınan verilerdir (başka bir şekilde indekslenmedikçe - örn. tam metin, Lucene - ancak yaptığınız gibi görünmüyor)

Aslında bir tam olarak ihtiyacınız varsa Büyük bir alan üzerinde eşleştirin, daha sonra indeksi daha küçük tutmanıza izin verecek şekilde karma kullanımı daha verimli olabilir. Tahminim, karma boyutundan daha büyük bir dizin boyutu kullanmanız gerekiyorsa (TEXT'nin başlangıcına ne kadar yakın olduğuna bağlı olarak, genellikle farklılık gösterir), karma değerini kullanın.

En iyi bahsiniz denemek ve görmek. Profil her ikisi de temsili verilerle yaklaşır ve öğrenir.

+1

I VARCHAR METİN farklı olarak, içi depolanır ve sık erişilen veriler için daha iyi bir performans sağlar, çünkü VARCHAR dizinler için kullanmak daha iyi bir sütun türü olabileceğini keşfetmiştir. http://stackoverflow.com/users/144287/brenton-alker –

İlgili konular