2012-08-01 17 views
7

Basit bir ürün tablosuna sahip olalım. Her bir üreticinin kendine özgü kimliği ve kategorisi vardır. Kullanıcılar kategoriye göre genellikle arama yapar, bu yüzden ürünleri kategoriye göre ayırmak istiyorum. Her bölüm bir kategoride örn.MySQL tablonun, benzersiz dizinde olmayan sütuna göre bölümlenmesi

Bunu nasıl yapacağım? Elbette kimlik sütunumda birincil anahtarım var ve kimliğime benzersiz bir şekilde ihtiyacım var. Her kategoride benzersiz değil. Ancak bu bölüm, "tablodaki her benzersiz anahtarın, tablodaki bölümleme ifadesindeki her bir sütunu kullanması gerektiği" konusunda bir sınırlama getirmiştir.

Peki, bu biraz işe yaramaz hale getirmiyor mu? Yoksa bir şey mi özlüyorum? Ne yapmalıyım?

http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html

cevap

10

hüner Mevcut birincil anahtarına alan category eklemektir. (Birincil anahtarınız birincil anahtar olarak kalır)
Daha sonra tablonuzu kategoriye göre bölümleyebilirsiniz.

ALTER TABLE `products` DROP PRIMARY KEY , ADD PRIMARY KEY (`id` , `category`); 
ALTER TABLE `products` PARTITION BY KEY(category) PARTITIONS 6; 

Eğer gerçekten benzersiz olmasını istiyorsanız id auto_increment seçeneği ekleyin ve tablodaki verileri eklediğinizde id değerine belirtilmez: Burada

kullanabileceğiniz koddur. Kimlik, eklendikten sonra veritabanı sunucusu tarafından belirlenir.

Gerekiyorsa, alan adlarını ve anahtar adlarını değiştirin.

Dokümantasyon:
Partitioning types
KEY Partioning

+0

Tabii, ama id sonra istemediğiniz, kategorisinde benzersiz ancak yalnızca tekil olmayacak. Into değiştirin o zaman çalışmayı durduracaktır. Ürün kategorisinin değişmesi durumunda ürün çoğaltılabilir. Ama neyse, cevabınız için teşekkürler. –

+0

Hayır. Bir birincil anahtara alan eklemek, yanıtımda yazdığım gibi onu non_unique yapamaz. Neden sadece çalıştığını görmeye çalışmıyorsun? O güne bölme yapmak için büyük bir kayıt tablosunda (2 ve 5 milyon kayıt arasında) bölümleme kullandım: çok hızlı bir şekilde "SELECT" 'e izin verir ve belirli bir güne ait tüm kayıtların son derece hızlı bir şekilde silinmesini sağlar (sadece bir bölümü bırakarak)). – Jocelyn

+0

Oh hayır, PRIMARY KEY'in hala benzersiz olacağını biliyorum. Ama şimdi sadece anahtarın bir parçası olacak olan ID, kategori sütununda farklı değer olarak benzersiz olmayı durduracaktır. Ama öyle görünüyor ki MySQL sadece böyle çalışır (çok mantıklı olmasa da) ve onunla yaşamak zorunda kalacağım. Her neyse, çaban için teşekkürler. –

İlgili konular