MySQL'de INDEX vs KEY kullanma arasındaki fark nedir?


192

Aşağıdaki kodda olduğu gibi INDEX kullanmayı biliyorum. Ve yabancı anahtarın ve birincil anahtarın nasıl kullanılacağını biliyorum .

CREATE TABLE tasks ( 
  task_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  parent_id INT UNSIGNED NOT NULL DEFAULT 0, 
  task VARCHAR(100) NOT NULL, 
  date_added TIMESTAMP NOT NULL, 
  date_completed TIMESTAMP, 
  PRIMARY KEY (task_id), 
  INDEX parent (parent_id), 
  ....


Ancak aşağıdaki gibi INDEX yerine KEY kullanarak bir kod buldum.

...
KEY order_date (order_date) 
...


Resmi MySQL sayfasında herhangi bir açıklama bulamadım. Birisi bana KEY ve INDEX arasındaki farkların ne olduğunu söyleyebilir mi?

Gördüğüm tek fark, kullandığımda KEY ...kelimeyi tekrarlamam gerekiyor
KEY order_date (order_date).

Yanıtlar:


264

Fark yok. Bunlar eşanlamlıdır.

Gönderen manuel giriş :CREATE TABLE

KEYnormalde ile eşanlamlıdır INDEX. Anahtar niteliği PRIMARY KEY, KEYbir sütun tanımında verildiği gibi de belirtilebilir . Bu, diğer veritabanı sistemleriyle uyumluluk için uygulanmıştır.


1
SQLYog'un en son sürümünde tablo bilgilerine bakarken, tabloyu KEY keyname (column_name)oluştururken gösterir INDEX keyname (column_name). Bir eşanlamlı olması onu mükemmel bir şekilde açıklar.
crmpicco

14

İşte "fark" hakkında güzel bir açıklama :

"MySQL her Anahtarın da dizine eklenmesini gerektirir, bu performansı artırmak için MySQL'e özgü bir uygulama detayıdır."


2
Soru, MySQL'de KEY ve INDEX SQL Tanımlayıcılarının kullanımı hakkındadır. Bir anahtar ve bir dizin arasındaki fark değil.
Josh J

Bir arama motoruyla farkı aradım ve bu ilk sonuçtu. Bence fazladan bir soru açmaya gerek yok. Ancak bunu yapmaktan çekinmeyin.
Stefan


4

Anahtarlar, bir tablo içinde çok özel roller oynayan özel alanlardır ve anahtar türü tablo içindeki amacını belirler.

Dizin, RDBMS'nin (veritabanı yönetim sistemi) veri işlemeyi geliştirmek için sağladığı bir yapıdır. Bir dizinin mantıksal veritabanı yapısıyla hiçbir ilgisi yoktur.

YANİ...

Anahtarlar, bir tablodaki kayıtları tanımlamak için kullandığınız mantıksal yapılardır ve dizinler, veri işlemeyi optimize etmek için kullandığınız fiziksel yapılardır.

Kaynak: Sadece Ölümlüler için Veritabanı Tasarımı

Eser Sahibi: Michael Hernandez


1
Soru, MySQL'de KEY ve INDEX SQL Tanımlayıcılarının kullanımı hakkındadır. Bir anahtar ve bir dizin arasındaki fark değil.
Josh J

-1

Anahtar, üzerinde bir dizin oluşturduğumuz sütunlar veya ifadeler kümesidir.

  1. Bir dizin veritabanında depolanan bir yapı olsa da, anahtarlar kesinlikle mantıklı bir kavramdır.

  2. Dizin, bir kayda hızlı erişimde bize yardımcı olurken, tuşlar yalnızca kayıtları benzersiz bir şekilde tanımlar.

  3. Her tablonun bir anahtarı olması gerekir, ancak bir dizine sahip olmak zorunlu değildir.

Https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721 adresini kontrol edin


3
Soru, MySQL'de KEY ve INDEX SQL Tanımlayıcılarının kullanımı hakkındadır. Bir anahtar ve bir dizin arasındaki fark değil.
Josh J

1
@Josh J Orijinal motivasyon tanımlayıcılar hakkında sormak olsa bile, bir anahtar ve bir arama motoru ile bir dizin hakkında fark aramak bu konuyu verir. Sorunun başlığını daha belirgin olacak şekilde geliştirmek mantıklı olabilir. Öte yandan, bir anahtar ve mysql bir dizin arasındaki fark hakkında bir soru yazmak muhtemelen bir kopya olarak işaretlenir. => Böyle tamamlayıcı cevapları çok faydalı buluyorum. "Gerçek" cevap zaten en yüksek puanı alacak. Bu yüzden tamamlayıcı cevaplarda olumsuz oy için bir neden görmüyorum.
Stefan

Bunu açıklığa kavuşturmak için INDEX ve KEY'i büyük harfle yazdım.
reinierpost
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.