当前位置:网站首页>Several index utilization of joint index ABC

Several index utilization of joint index ABC

2022-07-07 06:49:00 Adong-007

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 .

Here are some examples :

(1) select * from myTest where a=3 and b=5 and c=4; ---- abc The order 
abc All three indexes are in where It's used in the conditions , And it all worked 

(2) select * from myTest where c=4 and b=6 and a=3;
where The order of the conditions inside will be changed before the query mysql Automatic optimization , The effect is the same as the sentence 

(3) select * from myTest where a=3 and c=7;
a Use index ,b of no avail , therefore c There is no index effect (b Not used , So the index cannot reach  c , therefore c Unused index )

(4) select * from myTest where a=3 and b>7 and c=3; ---- b Range value , The breakpoint , blocked c The index of 
a Yes ,b Also used. ,c Not used , This place b It's the range value , It's also a breakpoint , It just uses the index itself 

(5) select * from myTest where b=3 and c=4; —  Federated indexes must be used sequentially , And need to use it all 
 because a The index is not used , So here  bc No indexing effect 

(6) select * from myTest where a>4 and b=7 and c=9;
a Yes  b Not used ,c Not used (a The range is used, so , Equivalent to a breakpoint , After that b,c No index is used )

(7) select * from myTest where a=3 order by b;
a Index is used ,b Index effect is also used in result sorting ,a In any of the following paragraphs b It's in order 

(8) select * from myTest where a=3 order by c;
a Index is used , But this place c No ranking effect , Because there's a break in the middle , Use  explain  You can see  filesort

(9) select * from mytable where b=3 order by a;
b No index is used , Sorting a It doesn't have an indexing effect 

The following conditions will invalidate the index :

1. Do nothing on the index column ( Calculation 、 function 、( Automatically or Manual ) Type conversion ), It will cause index invalidation and turn to full table scan
2. The storage engine cannot use the column to the right of the index range condition ( for example Only for b , c)
3. Try to use overlay index ( Queries that only access the index ( The index column is consistent with the query column )), Reduce select ***
4.mysql In use is not equal to (!= perhaps <>) When ** Failure to use the index will result in a full table scan
5.is null,is not null You can't use indexes
6.ike Start with a wildcard (’%abc…’)mysql Index invalidation will become a full table scan operation . problem : solve like‘% character string %’ When index is not used  Insert picture description here

7. String index is invalid without single quotation marks

Suggest :

  1. For single key indexes , Try to choose the current query Better filtering index
  2. When choosing a composite index , At present Query The most filterable field in the index field order , The higher the position, the better .
  3. When choosing a composite index , Try to include the current query Medium where Index of more fields in clause
  4. When choosing a composite index , Try to include the current query Medium where Index of more fields in clause
  5. By analyzing statistics and adjusting as much as possible query To achieve the purpose of selecting the appropriate index
原网站

版权声明
本文为[Adong-007]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207070237206769.html