当前位置:网站首页>Talking about MySQL index

Talking about MySQL index

2022-07-05 22:00:00 The sea of waves

Talking about MYSQL Index performance

The essence of index

Index is help MYSQL A well ordered data structure for efficient data acquisition .

image-20210204213920967

Index data structure

  • Binary tree It will become a linear linked list , Low efficiency
  • Red and black trees When there is a large amount of data ,IO Low disk efficiency
  • hash surface
    • Evaluation of index key Do it once. hash Calculation can locate the location of data storage
    • A lot of time Hash Index is better than B+ Tree indexing is more efficient
    • Can only satisfy “=”,“IN”, Range query is not supported
    • hash The question of conflict

image-20210205203033287

  • B-tree

    • Leaf nodes have the same depth , The pointer to the leaf node is null

    • All index elements are not duplicate

    • The data indexes in the node are incrementally arranged from left to right

      image-20210204222214291

  • B+tree

    • Non leaf nodes do not store data, Store index only , More indexes can be placed
    • The leaf node contains all index fields
    • The leaf node is connected with a pointer , Improve the performance of interval access , Support range lookup (20<col<50)
    • The height is about 3 To 4, Leaf nodes can store 2kw An index

    lookup 30 The process of this element , First load the root node into memory , According to the idea of binary search, we can find 15~56 The index of this piece

    Then according to the idea of binary search Find the 20~49 This index , Finally find 30 This element .

myIsam Storage engine index

image-20210205195352745

The data in the table is stored on disk . Each row of data has a disk file address

All elements in the table are stored in files .

image-20210205195942842

frm file : Definition and structure of table

MYD file : Table all data

MYI file : Table all indexes

innodb Storage engine index

image-20210205195513759

image-20210205200654793

frm file : Definition and structure of table

ibd file : Table data and index , Disk read ahead , The data near the searched records will be queried .

Clustered index : The leaf node contains the index and other data fields of the row

Nonclustered indexes : Search across multiple files according to the index , such as myIsam In the storage engine , Need from MYI File to MYD file Find data in ( Also called return table )

Secondary index : The leaf node stores the primary key value , Every time you look up data , Find the primary key value in the leaf node according to the index , According to the primary key value, we can get a complete row of records in the cluster index

Joint index : Union index is also called compound index . For composite indexes :Mysql Use the fields in the index from left to right , A query can use only a part of the index , But only the far left part . For example, the index is key index (a,b,c). Can support a | a,b| a,b,c 3 Combination of search , But does not support b,c Search for . When the leftmost field is a constant reference , The index is very efficient .

( Interview questions ) Why suggest Innob A table must have a primary key , And it is recommended to use the auto increasing primary key of integer type

If not built , The database will automatically find a column of unique data as the primary key index , If no unique data is found , Will build a fake hidden column , This will cause mysql Resources are tight , Bring a great burden .

Integer index and string or UUID Compared with , More efficient , Take up less space .

Auto increment :UUID Not auto increment , There may be node splitting , It is efficient to build nodes without self increment .

( Interview questions ) Compared with storing row pointers in leaf nodes , The secondary index will take up more space to store the primary key value , Then why do we design it like this ?

InnoDB When moving rows , There is no need to maintain a secondary index , Because the leaf node stores the primary key value , Instead of Pointers .

( Interview questions ) that InnoDB With clustering index , Why should there be a secondary index ?

The leaf node of the cluster index stores a row of complete data , The secondary index only stores the primary key value , Compared with clustered index , Take up less space . When we need to build multiple indexes for a table , If they are clustered indexes , That will take up a lot of memory space , therefore InnoDB The primary key in is a clustered index , And the only index 、 General index 、 Prefix indexes are secondary indexes .

image-20210205203033287

mysql Explanation of the leftmost prefix optimization principle

image-20210205205521545

Skip in composite index name after ,age Is chaotic , So a full scan will be performed .


The list of articles to be completed later

  • Business
  • MVCC
  • lock
  • Sub database and sub table

There is something wrong , Welcome to the discussion .
Last , Welcome to pay attention to my wechat , What do you like , Collection , Forwarding is my greatest encouragement .

image.png

原网站

版权声明
本文为[The sea of waves]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140504117697.html