What is an index if there is no index , The number of records scanned is greater than the number of records indexed
The index stores the value of the index column ( such as id Index column , Then store the value of the index column ), Address of the row corresponding to the index value in memory ( Or directly store the data of this row )
SELECT * FROM user WHERE username= 'jiajun'
,username Indexing , If the data structure of the index is hash surface , So at this time , By calculation jiajun of hash value ,O(1) Complexity can find the location of the record
hash Index under equivalent search , None at this time hash conflict , In this case , Efficiency is very high
But under the scope search , because hash Not orderly , Then search the range ,hash The advantages of table cannot be brought into play .
stay hash Under conflict , Search efficiency will decrease
Disk read disk read steps ： Fixed cylinder , Fixed track , Fixed magnetic block
Disk time is mainly consumed on the positioning cylinder , So if you want to improve the speed , With the same amount of data , Put as much data as possible on the disk block , Then this can reduce the number of times the head positioning cylinder moves , reduce IO Times of .
The value of all nodes in the left subtree of the binary search tree is less than the value of its root node
The value of all nodes in the right subtree is greater than that of its root node
The left and right subtrees of any node are binary search trees
No node with equal key value
Analyze the complexity of binary search tree lgn
But is there any way to reduce it IO Times of , That is, can we reduce the height of the tree
(m Step tree m/2<=k<=m) At least two child nodes of the root node
All leaf nodes are on the same layer
Intermediate node contains k-1 Elements and k Children
The elements in the node are arranged from small to large
Each node contains the value of the index column , And this data record ( Or the value of this data record )
Analysis relative to binary lookup tree ,B The tree became short and fat , Because each node stores more elements , So with the same element , Reduced the height of the tree , Then you can reduce IO Times of
Each node stores data ( The value of this line record or the address of this line record in memory ), So different query performance is different .
B+ Tree in B- On the basis of trees
Except for leaf nodes , Other nodes do not contain records ( Rows in the database ) Location of
The leaf node contains all index values , And arranged from small to large , And records ( Row in database ) Location of
Analysis if the nodes are the same size , So if we except leaf nodes , Other nodes do not contain data , Then you can put more elements ( Index value ), In this way, the tree will become more short and fat , that IO The number of times can be further reduced
Because the elements of leaf nodes are arranged in order , And a linked list is formed between leaf nodes , Then the efficiency of range query can be improved during orderly search
be relative to B tree , Because all data is stored in leaf nodes , That means that every search must find the leaf node from the root , This means that the query performance is average .
Summary index is a kind of data , Can avoid full table query , It can be compared with catalogues and books .
Indexes need a data structure to store
Use hash table (hash) The query complexity can reach O(1), But when querying the range ,hash Can't improve performance
IO Operation is time-consuming , To improve query performance , Can reduce IO Times of
For the storage structure of the tree , To improve performance , reduce IO Times of , Can lower the height of the tree
Read a node once IO, With the same amount of data , If each node can store more elements , Then the height of the tree can be reduced .
B The tree lowered the height of the tree , When the node size is the same , because B The nodes of the tree store elements and data , and B+ The tree stores all the data in the leaf node , So in that case , Each node can store more elements , Then you can lower the height of the tree again
B+ The query performance of the tree is more stable , And it is more conducive to range search
If it is a clustered index (InnoDB engine ), Then the data of this record stored in the node , The data file itself is an index file
If it is a nonclustered index (MyISAM engine ), Then the node stores the address of the record in this line . Index file and data file are separated
Type of index general index , Allow the same content
unique index , Unique index value , Allow null values
primary key , Automatically create a primary key index when creating a primary key , Unique and cannot be empty
Composite index , Multi column composite index
Use of indexes ALTER TABLE table_name ADD INDEX index_name (column_list) Add general index
ALTER TABLE table_name ADD UNIQUE (column_list) Add unique index
ALTER TABLE table_name ADD PRIMARY KEY (column_list) Add primary key index
Note that if this is username,age,sex Build joint index
Leftmost match means that the leftmost index is matched first ,(username)(username,age)(username,age,sex), As long as the query criteria use the leftmost column , Generally, index will be used . The order can be different , such as (age,username), This is the credit of the query optimizer .
Fuzzy query only % No. is not in the first character , Index can be used , such as username like '%jiajun' So it is not adopted
If or There is a condition in which there is no index ,sql Statement does not use index , such as usernmae ='jiajun' or pwd='666', The index is not adopted at this time
In composite index , If the query condition is not the first column of the index , Index may not be adopted , For example, at this time where age =1
If the column is character type , such as username It is a character type and an index column , If this is a query username=1 , Without quotation marks , Then the index will not be used at this time
Can be used show status like 'Handler_read%' To view index usage .
It is suggested to give priority to practice
Index principle index should be designed in where Column after , instead of select Column after
Indexes should be built on columns with large discrimination , For example, the status is only 1 and 2 There is no need to build an index
When indexing strings , A prefix length should be specified , For example, a column is char(200), If the first few characters need to be distinguished , Then index the first few characters , This reduces the footprint , Also increased speed
Don't create too many indexes , Index takes up space , And the speed will be reduced when updating , And if there are too many indexes ,Mysql When implementing the plan , Each index will be considered , It's also a waste of time
There is no doubt about the advantages and disadvantages of indexing , When used correctly , Index can improve query speed
Indexing can also improve the speed of grouping and sorting
When deleting and adding due to modification , To maintain index files , Adjust the tree , So the performance is reduced
Index files also need space