I have heard some people talki about
using some sort of hash table for
faster lookups would something like
that be possible here?
Bir index denir, ve size bir JOIN (veya >, >=, =, <=, <
gibi açık bir kısıtlaması veya {[(2) ile eşleşen kullanarak planlıyorsanız, her sütuna bir eklemek gerekir Bir belirtilen listede yalnızca öğeler) maçları]} fıkra. Bu şekilde veritabanı sunucusu yerine tablo tüm satırları ile bir kaba kuvvet arama yapmak yerine, endekste doğru girdileri doğru atlayabilirsiniz. Bu tam bir kitapta dizin gibi. Eğer isim "Knuth" göründüğü bir kitapta sayfaları bulmak istiyorsa, iki seçeneğiniz var. Kitap bir dizin varsa, dizin bakmak ve isim olduğunu umuyoruz. Kitap bir dizin yoksa, sadece her şeyi kendiniz üzerinden okumak gerekecek ve o kadar uzun sürer.
Eğer sıralama / sipariş (ya da göreli sayısal / dize karşılaştırma her türlü yapıyor) önem veriyorsanız, bu sıralanmış bir dizin olmalıdır. Aksi takdirde satır dolu tablolar için daha hızlıdır, ancak sıralama bilgi taşıyan bir hashtable dizin olabilir. Ayrıntılar bu tür veritabanı sunucu yazılımı türü kullanıldığı bağlı olarak farklı sözdizimi / seçenekler olması muhtemeldir. ** (Aşağıdaki nota bakınız)
Eğer kendiniz bir tane eklemek zorunda kalmazsınız birincil anahtarlar zaten otomatik olarak oluşturulan bir indekse sahip olduğunu unutmayın. Not Ayrıca bir çoklu-sütun birincil anahtar varsa, örneğin (Devlet, Şehir, Posta Kodu) sonra etkili örneğin, birincil anahtarın sol alt kümeleri endeksleri olacak ücretsiz bir Devlet üzerinde dizin ve (Devlet, Şehir) ve (Devlet, Şehir, Posta Kodu) olsun, ama sen sinde Posta Kodu veya Şehir veya (City, sinde Posta Kodu) JOIN istiyorsanız o zaman kendi endeksleri oluşturmanız gerekir Birincil anahtar tarafından sağlanan ek olarak.
Bu sütunlarda indeksine sahip olmalıdır gibi bir durumda, (Ben varsayarak yaşıyorum sütunları *-ed zaten birincil anahtarlar ettik) görünüyor. Eğer kullanıcı kimliklerinin sayısal sırasına herhangi bir önemi yoksa, o hashtable'a endeksleri için iyi bir aday olurdu.
Users.user_id*
Friends.user_id
Friends.friend_id
Friends.active
Actions.user_id
** MySQL için, CREATE INDEX statement bir hashtable dizin için HASH KULLANARAK, ya da bu mekansal veri olarak ... RTREEs görmezden (sıralı bir dizin için) btree KULLANMA diyor ki bir madde ekleyin. MySQL ortak depolama motorları InnoDB ve MyISAM üzerinde HASH endeksleri izin vermediğini de unutmayın. Yüksek performansa ihtiyaç gerçekten büyük veri setleri olasılıkla veri bir HASH endeksi ile bir bellek masada yansıtılmış olması gerekir. 50.000 satır ile muhtemelen bu konuda endişelenmenize gerek yok; HASH (1) O olduğunu ve çok fark muhtemelen orada değil oysa btree arama süresi O (log n) 'dir. BTREEs çok geniş ve derin olmamak tasarlanmıştır; arama adımda tek bir ek karşılaştırma gerektiren, 10 veya 100 bir faktör tarafından satır # artırmak gerekebilir.