Если у вас есть только 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.
Надеюсь, это поможет!
person
Community
schedule
16.04.2009