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

Кардиналност на индекса на MySQL - производителност срещу ефективност на съхранение

По-високата мощност означава по-добра производителност на четене, защото по дефиниция има по-малко записи за четене.

За да обработите заявка като тази:

SELECT  *
FROM    mytable
WHERE   indexed_col = @myvalue

, двигателят трябва да извърши следните стъпки:

  1. Намерете първия запис, отговарящ на условието.

    Това се прави при преминаване на 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)) стъпки.

  2. Преминаване през индекса, докато стойността на ключа се промени. Това, разбира се, изисква линейно време:колкото повече записи имате, толкова повече трябва да преминете.

Ако имате нужда само от първия запис:

SELECT  *
FROM    mytable
WHERE   indexed_col = @myvalue
LIMIT 1

, мощността на колоната не влияе на производителността на четене.

Всеки индексен ключ има скрита допълнителна стойност:указател на запис. Това е целият смисъл на наличието на индекс:трябва да знаете към кой запис сочи.

Тъй като указателят на запис по дефиниция е уникален, всеки индексен ключ също е уникален. Индексните записи, споделящи една и съща стойност на ключа, се сортират по показалеца на запис.

Това е, за да направи индекса поддържан:ако изтриете запис със стойност на индексирана колона, споделена от милион други записи, съответният индексен запис също трябва да бъде изтрит. Но целият милион от индексните записи не се преглежда:вместо това показалецът на запис се използва като допълнително условие за търсене.

Всеки ключ на индекса всъщност е уникален (дори ако не дефинирате индекса като уникален) и следователно има максимална възможна мощност.

Така че отговорът на вашите въпроси е:не, мощността на колоната не влияе върху ефективността на запис на индекс.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Загубена връзка с MySQL сървър при опит за свързване с отдалечен MySQL сървър

  2. REGEXP С PDO Mysql

  3. Как да преминете през набор от резултати на mysql

  4. Печат на йерахични данни в родителски дъщерен формуляр неподреден списък php?

  5. Динамично име на колона, използващо подготвен израз + sql заявка с променлива, съдържаща 's