2011-05-10 11 views
21

Kullanıcıların sitede görüntülerle ilgili yaptığı yorumları depolayan bir tablo var. Tablo, birincil anahtar olan image_id, user_id ve comment olan dört sütunla yapılandırılmıştır. Yapmak istediğim, kullanıcının görüntü başına yalnızca bir yorumda bulunabilmesini sağlamaktır. İki sütunda sadece benzersiz bir dizin oluşturuyor muyum?MySQL Benzersiz bir sütun kombinasyonunu oluşturun

CREATE UNIQUE INDEX imgusr ON comments (image_id, user_id); 

fikri çalışmak için aşağıdaki sorguyu elde etmektir:

INSERT INTO comments SET image_id = '1', user_id = '2', comment = 'nice' ON DUPLICATE KEY UPDATE comment = 'nice'; 

gotchya (? Gotme) çok büyük alması beklenen çünkü tablo innodb olmasıdır. Birincil anahtarın varlığına rağmen işe yarayacak yaklaşım bu mu?

+0

Denedin mi? Başarısızlıktan mı yoksa kötü performans göstermekten mi endişeleniyorsunuz? – outis

+0

Her ikisi de. Aslında bir sistemden diğerine geçiyorum ve ilk tablo oldukça masif olacak (hemen dört milyon satır derhal, ilk birkaç hafta içinde 20 milyona ulaşması bekleniyor) bu yüzden bu konuda kesinlikle emin olmak istiyorum başlangıçtan doğru yol. – Wige

cevap

12

Evet, bu mükemmel çalışacaktır.

Başka bir konuda, neden bir row_id var? Birincil anahtarı (image_id, user_id) olarak atayabilirsiniz, bu da işe yarayacaktır.

+0

Bunu bir InnoDB tablosunda yapabileceğimi farketmedim. Önerin için teşekkürler. – Wige