Mysql Kompozit Birincil Anahtar INDEX nasıl?


12

İki veya daha fazla sütun için bileşik birincil anahtar oluştururken PRIMARY KEY(col1, col2, col3); sistem INDEXher sütunu ayrı ayrı mı?

Bu soruyu sormamın nedeni, kullandığımızda UNIQUE INDEX (col1, col2, col3), INDEXyalnızca ilk sütun için geçerli olduğu ve INDEXdiğer sütunlar için ek s oluşturmamız gerektiğidir . Kompozit Birincil Anahtar için de durumun böyle olup olmadığını bilmek istiyorum.

Yanıtlar:


16
  1. Bileşik birincil dizin her zaman col1, col2, col3 değerlerinin kombinasyonunun benzersiz olmasını sağlar. Dizinin amacı değerlerin benzersiz olmasını sağlamaksa,

  2. Bileşik dizin ayrıca col1, col2 ve col3 sütunlarının herhangi bir birleşiminde dizin eşleşmeleri sağlar

  3. Diğerleri olmayan sütunlardan herhangi birini kullanarak katılır veya filtre uygularsanız, col2 ve col3 üzerinde ayrı dizinler oluşturabilirsiniz.

  4. Her zaman sayısal bir birincil anahtarı (iş ilişkisi olmadan) ve gerektiğinde bileşik birincil anahtar yerine benzersiz dizinleri tercih ederim.


1
güzel nokta! daha sonra, bileşik birincil anahtar BENZERSİZ INDEX benzer ve biz hızlı bir satır getirilmesi için 2, 3, ... sütunlar için dizin yok?
Googlebot

1
@ssmusoke ben çıkarılmasından doğan varsayalım Can col1bir o noktada 3'te SELECT * WHERE col1 = 10verimli olurdu?
Andy

2
@Andy # 3, col1, col2 ve col3 bileşik dizinine ek olarak bileşik dizin kullanılacaktır. Eğer col1 olmadan col2 filtreleri ve Col3 yaparsanız Ancak o zaman tek başına her biri için endeksleri ayırmak gerek
Stephen Senkomago Musoke

3
Col1, col2 ve col3 üzerinde bir dizin olması, col1 dizindeki ilk sütun olduğundan SELECT * FROM col1 = 10'un verimli olacağı anlamına gelir, böylece # 3 col2 ve col3 için aynısını yapmanızı sağlar,
Col1

2
@PaulWasilewski evet, aslında bileşik birincil anahtarın mantıklı olduğu özel durumlar var, ancak bunlar sadece özel durumlar.
Stephen Senkomago Musoke
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.