Kardinalitas yang lebih tinggi berarti kinerja membaca yang lebih baik karena, menurut definisi, ada lebih sedikit catatan untuk dibaca.
Untuk memproses kueri seperti ini:
SELECT *
FROM mytable
WHERE indexed_col = @myvalue
, mesin harus melakukan langkah-langkah berikut:
-
Temukan entri pertama yang memenuhi persyaratan.
Ini dilakukan melintasi
B-Tree
, mulai dari entri root.Di seluruh halaman, pencarian dilakukan dengan mengikuti
B-Tree
link; dalam halaman, pencarian dilakukan menggunakan pencarian biner (kecuali kunci Anda dikompresi, dalam hal ini pencarian linier).Algoritma ini memiliki efisiensi yang sama untuk kolom kardinalitas tinggi dan kolom kardinalitas rendah. Menemukan
3
pertama (sebagai lawan dari3
) dalam daftar ini:1 2 3 4 5 6 7 8 9 10 3 3 3 3 3 3 3 3 4 4
membutuhkan
O(log(n))
yang sama langkah. -
Melintasi indeks hingga nilai kunci berubah. Ini, tentu saja, membutuhkan waktu linier:semakin banyak catatan yang Anda miliki, semakin banyak yang harus Anda lewati.
Jika Anda hanya membutuhkan catatan pertama:
SELECT *
FROM mytable
WHERE indexed_col = @myvalue
LIMIT 1
, kardinalitas kolom tidak memengaruhi kinerja baca.
Setiap kunci indeks memiliki nilai tambahan tersembunyi:penunjuk catatan. Inilah inti dari memiliki indeks:Anda perlu tahu catatan mana yang ditunjuknya.
Karena penunjuk catatan, menurut definisi, adalah unik, setiap kunci indeks juga unik. Entri indeks yang berbagi nilai kunci yang sama diurutkan berdasarkan penunjuk catatan.
Ini untuk membuat indeks dapat dipelihara:jika Anda menghapus catatan dengan nilai kolom terindeks yang dibagikan oleh satu juta catatan lain, catatan indeks terkait juga harus dihapus. Tetapi seluruh juta catatan indeks tidak diperiksa:sebagai gantinya, penunjuk catatan digunakan sebagai kondisi pencarian tambahan.
Setiap kunci indeks sebenarnya unik (bahkan jika Anda tidak mendefinisikan indeks sebagai unik), dan, karenanya, memiliki kardinalitas maksimum yang mungkin.
Jadi jawaban atas pertanyaan Anda adalah:tidak, kardinalitas kolom tidak mempengaruhi kinerja penulisan indeks.