Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо кардиналността на индекс в MySQL остава непроменена, когато добавя нов индекс?

Ако имате само 1 ред в таблицата, кардиналността на индекса трябва да бъде 1, разбира се. Просто се брои броят на уникалните стойности.

Ако мислите за индекс като таблица за търсене, базирана на сегменти (като хеш), тогава кардиналността е броят на сегментите.

Ето как работи:Когато изграждате индекс върху набор от колони (a,b,c,d) , след това базата данни преминава през всички редове в таблицата, като разглежда подредените четворки от тези 4 колони за всеки ред. Да приемем, че вашата таблица изглежда така:

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

Така че това, което базата данни разглежда, са само 4-те колони (a,b,c,d):

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

Виждате ли, че са останали само 3 уникални реда? Те ще станат наши кофи, но ще се върнем към това. В действителност има и идентификатор на запис или идентификатор на ред за всеки ред в таблицата. Така че нашата оригинална таблица изглежда така:

(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

Така че, когато разглеждаме само 4-те колони на (a,b,c,d), ние наистина разглеждаме и идентификатора на реда:

(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

Но ние искаме да направим търсене по (a,b,c,d), а не по идентификатор на ред, така че произвеждаме нещо подобно:

(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

И накрая, ние групираме всички идентификатори на редове, които имат еднакви (a,b,c,d) стойности заедно:

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

Виж това? Стойностите на (a,b,c,d), които са (1,1,1,1) (1,2,1,1) и (1,3,1,1) се превърнаха в ключове за нашата таблица за търсене в редовете на оригиналната таблица.

Всъщност нищо от това всъщност не се случва, но трябва да ви даде добра представа как може да се направи „наивно“ (т.е. директно) внедряване на индекс.

Но изводът е следният:кардиналността просто измерва колко уникални реда има в един индекс. И в нашия пример това беше броят на ключовете в нашата таблица за търсене, който беше 3.

Надявам се това да помогне!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изтеглянето на Excel остана 188kb

  2. Как да заключа четене/запис в MySQL таблици, така че да мога да избирам и след това да вмъквам без други програми да четат/записват в базата данни?

  3. Някой е хакнал моята база данни - как?

  4. Съхранение на файлове за уеб приложения:файлова система срещу DB срещу NoSQL двигатели

  5. Как да игнорирате параметър в подготвена mysqli заявка в PHP?