По-високата мощност означава по-добра производителност на четене, защото по дефиниция има по-малко записи за четене.
За да обработите заявка като тази:
SELECT *
FROM mytable
WHERE indexed_col = @myvalue
, двигателят трябва да извърши следните стъпки:
-
Намерете първия запис, отговарящ на условието.
Това се прави при преминаване на
B-Tree
, като се започне от основния запис.На всички страници търсенето се извършва чрез следване на
B-Tree
връзки; в рамките на страница търсенето се извършва с помощта на двоично търсене (освен ако ключовете ви не са компресирани, в този случай това е линейно търсене).Този алгоритъм има същата ефективност както за колони с висока мощност, така и за колони с ниска мощност. Намиране на първия
3
(за разлика от всеки3
) в тези списъци:1 2 3 4 5 6 7 8 9 10 3 3 3 3 3 3 3 3 4 4
изисква същия
O(log(n))
стъпки. -
Преминаване през индекса, докато стойността на ключа се промени. Това, разбира се, изисква линейно време:колкото повече записи имате, толкова повече трябва да преминете.
Ако имате нужда само от първия запис:
SELECT *
FROM mytable
WHERE indexed_col = @myvalue
LIMIT 1
, мощността на колоната не влияе на производителността на четене.
Всеки индексен ключ има скрита допълнителна стойност:указател на запис. Това е целият смисъл на наличието на индекс:трябва да знаете към кой запис сочи.
Тъй като указателят на запис по дефиниция е уникален, всеки индексен ключ също е уникален. Индексните записи, споделящи една и съща стойност на ключа, се сортират по показалеца на запис.
Това е, за да направи индекса поддържан:ако изтриете запис със стойност на индексирана колона, споделена от милион други записи, съответният индексен запис също трябва да бъде изтрит. Но целият милион от индексните записи не се преглежда:вместо това показалецът на запис се използва като допълнително условие за търсене.
Всеки ключ на индекса всъщност е уникален (дори ако не дефинирате индекса като уникален) и следователно има максимална възможна мощност.
Така че отговорът на вашите въпроси е:не, мощността на колоната не влияе върху ефективността на запис на индекс.