Apakah Anda perlu membuat indeks secara eksplisit, atau itu implisit ketika mendefinisikan kunci utama? Apakah jawabannya sama untuk MyISAM dan InnoDB?
Apakah Anda perlu membuat indeks secara eksplisit, atau itu implisit ketika mendefinisikan kunci utama? Apakah jawabannya sama untuk MyISAM dan InnoDB?
Jawaban:
Kunci utama selalu diindeks. Ini sama untuk MyISAM dan InnoDB, dan umumnya berlaku untuk semua mesin penyimpanan yang mendukung indeks.
Menurut http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html akan terlihat bahwa ini akan menjadi implisit
Meskipun ini ditanyakan pada tahun 2009 saya pikir saya akan mengirim referensi aktual ke dokumentasi MySQL pada kunci primer. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
The primary key untuk tabel merupakan kolom atau kumpulan kolom yang Anda gunakan dalam pertanyaan Anda yang paling penting. Ini memiliki indeks terkait, untuk kinerja permintaan yang cepat
Untuk referensi MySQL 5.0, lihat: http://dev.mysql.com/doc/refman/5.0/id/mysql-indexes.html
Sebagian besar indeks MySQL ( PRIMARY KEY , UNIQUE, INDEX, dan FULLTEXT) disimpan dalam B-tree. Pengecualian adalah bahwa indeks pada tipe data spasial menggunakan R-tree, dan bahwa tabel MEMORY juga mendukung indeks hash.
Kunci utama diindeks secara implisit untuk MyISAM dan InnoDB. Anda dapat memverifikasi ini dengan menggunakan EXPLAIN pada kueri yang menggunakan kunci utama.
Saya kira ini jawabannya
mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)
mysql> show indexes from test \G
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
Indeks paling baik digunakan pada kolom yang sering digunakan di mana klausa, dan dalam segala jenis penyortiran, seperti "urutan oleh". Anda mungkin bekerja pada basis data yang lebih kompleks, jadi ada baiknya mengingat beberapa aturan sederhana.
Indeks mempercepat tempat klausa dan memesan. Ingatlah untuk memikirkan BAGAIMANA data Anda akan digunakan saat membangun tabel Anda. Ada beberapa hal lain yang perlu diingat. Jika meja Anda sangat kecil, yaitu hanya beberapa karyawan, lebih buruk menggunakan indeks daripada membiarkannya keluar dan membiarkannya melakukan pemindaian tabel.
Indeks benar-benar hanya berguna dengan tabel yang memiliki banyak baris.
Satu hal yang perlu diingat, yang merupakan con dalam situasi database karyawan kami, adalah bahwa jika kolom adalah panjang variabel, indeks (dan juga sebagian besar MySQL) berkinerja jauh lebih efisien.
Jangan lupa bergabung juga! Kolom gabungan yang diindeks mempercepat.
Kunci utama selalu diindeks dan unik secara otomatis. Jadi, berhati-hatilah untuk tidak membuat indeks yang berlebihan.
Misalnya, jika Anda membuat tabel seperti itu
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
karena Anda ingin mengindeks kunci utama dan menerapkan batasan keunikan di atasnya, Anda sebenarnya akan membuat tiga indeks foo
!
Orang dapat menganggap kolom kunci primer sebagai kolom indeks lainnya dengan batasan kunci primer yang disertakan.
Dalam sebagian besar kasus penggunaan, kita memerlukan kunci primer, dan kolom / kolom terindeks dalam sebuah tabel, karena permintaan kita ke tabel dapat menyaring baris berdasarkan pada kolom / kolom yang bukan kunci utama, dalam hal ini kita biasanya mengindeks kolom / kolom tersebut demikian juga.