Mysql indexes haqqında məlumat

Salamlar, mysql-də indeksləmək ilə bağlı məlumatlanmaq istəyirdim, oxudum ki, indexləmək axtarışı sürətləndirir və primary key ozü indexlənmiş bir column olur. Ona görə axtarış digər columnlara görə axtarışdan daha sürətlidi. Və digər columnlarada, öyrəndimki – alter table table_name add index ‘column_name’ (column_name) bu query ilə index vermək olur. Bəs bütün columnları indexləməyin ziyanlı tərəfi varmı?

Səs: +10. Bəyənilsin Zəifdir

Baxılıb: 2240 dəfə

Cavablar ( 1 )

  1. Salam,

     

    Mövzu geniş mövzudur və ümumiyyətlə hər RDBMS-in özünün index-ləmə , data manipulation və.s məntiqi vardır.

    Aşağıdakı məlumatlar MySQL spesifikdir:

     

    İlk öncə Primary Key özü elə index-dir. Hər MySQL cədvəldə internal olaraq sanki PK yaradılır , hətta siz bunu cədvəldə göstərməsəniz.

    PK olmayan index-lər isə secondary index-lər adlanır və bu index-lərin özləri belə PK vasitəsilə tapılır.

    Nəticə: çalışın cədvəlinizdə PK-ya ehtiyac olmasa belə bunu yaradın.

     

    Bəli index-ləmə select-ləri sürətləndirə bilər, lakin eyni zamanda Update və insert-ləri zəiflədə bilər. Çünki hər bir DML index creation və flushing tələb edir.

    Burda xüsusən qeyd etmək istərdim ki, əgər sizin versiyanız MySQL 5.6-dan aşağıdırsa və cədvəliniz çox iri həcmlidirsə o zaman index-ləri diqqətlə əlavə edib və yaxud silmək lazımdır. Çünki aşağı versiyalarda ~fast index creation~ və ~online alter~ xüsusiyyətləri yoxdur.

    Siz index silib yaradan müddətdə sizin cədvəliniz erişilməz qalacaq necə deyərlər.

     

    Çoxsaylı index həmçinin əlavə HDD deməkdir. Hər bir index disk-də yer tutur. Aşağıdakı sorğunun köməyi ilə siz cədvəl ve cədvəlin index MB-sini öyrənə bilərsiniz:

     

    SELECT `table_name`, ENGINE, ROW_FORMAT,table_rows,
    TRUNCATE((data_length+index_length)/1024/1024,4) AS total_mb,
    TRUNCATE((data_length)/1024/1024,4) AS data_mb,
    TRUNCATE((index_length)/1024/1024,4) AS index_mb
    FROM information_schema.`TABLES`
    WHERE `TABLE_SCHEMA`='xxx' AND `table_name`='news';
    

    Sorğunun nümunə outputu:

    +------------+--------+------------+------------+----------+----------+----------+
    | table_name | ENGINE | ROW_FORMAT | table_rows | total_mb | data_mb  | index_mb |
    +------------+--------+------------+------------+----------+----------+----------+
    | news       | InnoDB | Compact    |     237029 | 580.9062 | 564.8437 |  16.0625 |
    +------------+--------+------------+------------+----------+----------+---------  

    Gördüyünüz kimi, cədvəlin bir də index həcmi var.

    İndex-lər yalnız xüsusi araşdırılıb lazımı column tapıldıqdan sonra yaradılmalıdır.

     

    Təşəkkürlər.

Cavab yazın