Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa kardinalitas indeks di MySQL tetap tidak berubah saat saya menambahkan indeks baru?

Jika Anda hanya memiliki 1 baris dalam tabel, tentu saja kardinalitas untuk indeksnya adalah 1. Itu hanya menghitung jumlah nilai unik.

Jika Anda menganggap indeks sebagai tabel pencarian berdasarkan bucket (seperti hash), maka kardinalitasnya adalah jumlah bucket.

Begini cara kerjanya:Saat Anda membuat indeks di atas sekumpulan kolom (a,b,c,d) , lalu database menelusuri semua baris dalam tabel, melihat ke empat rangkap terurut dari 4 kolom tersebut, untuk setiap baris. Katakanlah tabel Anda terlihat seperti ini:

a  b  c  d  e   
-- -- -- -- --  
1  1  1  1  200 
1  1  1  1  300
1  2  1  1  200
1  3  1  1  200

Jadi yang dilihat database hanyalah 4 kolom (a,b,c,d):

a  b  c  d  
-- -- -- --
1  1  1  1 
1  2  1  1 
1  3  1  1 

Lihat bahwa hanya ada 3 baris unik yang tersisa? Itu akan menjadi ember kami, tetapi kami akan kembali ke sana. Pada kenyataannya, ada juga record id, atau pengidentifikasi baris untuk setiap baris dalam tabel. Jadi tabel asli kita terlihat seperti ini:

(row id) a  b  c  d  e   
-------- -- -- -- -- --  
00000001 1  1  1  1  200 
00000002 1  1  1  1  300
00000003 1  2  1  1  200
00000004 1  3  1  1  200

Jadi ketika kita hanya melihat 4 kolom dari (a,b,c,d), kita sebenarnya juga melihat id baris:

(row id) a  b  c  d 
-------- -- -- -- --
00000001 1  1  1  1
00000002 1  1  1  1
00000003 1  2  1  1
00000004 1  3  1  1

Tapi kami ingin melakukan pencarian dengan (a,b,c,d) dan bukan dengan id baris, jadi kami menghasilkan sesuatu seperti ini:

(a,b,c,d) (row id)
--------- --------
1,1,1,1   00000001
1,1,1,1   00000002
1,2,1,1   00000003
1,3,1,1   00000004

Dan terakhir, kami mengelompokkan semua id baris dari baris yang memiliki nilai identik (a,b,c,d) menjadi satu:

(a,b,c,d) (row id)
--------- ---------------------
1,1,1,1   00000001 and 00000002
1,2,1,1   00000003
1,3,1,1   00000004

Lihat itu? Nilai (a,b,c,d), yaitu (1,1,1,1) (1,2,1,1) dan (1,3,1,1) telah menjadi kunci untuk tabel pencarian kami ke dalam baris tabel asli.

Sebenarnya, semua ini tidak benar-benar terjadi, tetapi ini akan memberi Anda gambaran yang baik tentang bagaimana implementasi indeks yang "naif" (yaitu langsung) dapat dilakukan.

Tetapi intinya adalah ini:kardinalitas hanya mengukur berapa banyak baris unik yang ada dalam indeks. Dan dalam contoh kami itu adalah jumlah kunci di tabel pencarian kami, yaitu 3.

Semoga membantu!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Bagaimana menjumlahkan dari tabel lain dan menyisipkan di tabel lain

  2. MySQL mengatur tanggal saat ini di bidang DATETIME saat disisipkan

  3. JSON_VALID() – Tes untuk JSON yang Valid di MySQL

  4. PERIKSA batasan di MySQL tidak berfungsi

  5. MySQL pilih yang berbeda