1.索引匹配(match)
由左而右
1.1有個索引為(a,b,c)
則對(a,b,c),(a,b),(a)的查詢進行索引\
1. 對查詢進行優化,應儘量避免全表掃描
cluster index scan
全索引掃描意思是 index_a_b(a,b)
select a,b from table_1
沒有where
1.2
where語句中列的表達式為=、>、>=、<、<=、BETWEEN、ISNULL或者LIKE 』pattern』(其中』pattern』不以通配符開始)
between取出超過總數18%不使用索引
1.3
3、每個AND組作為表達式匹配索引。
SELECT * FROM tbl_name WHERE (str_col1=val1 OR col4 =val4) AND col2=val2;
因為str_col1=val1 OR col4 =val4作為一組,col4不匹配索引中的列,所以查詢不匹配索引。
原文網址:https://kknews.cc/zh-tw/other/qyk68zo.html
1.4
4、如果表達式中存在類型轉換或者列上有複雜函數則與該列不匹配索引中的列。
SELECT * FROM tbl_name WHERE str_col1=1;SELECT * FROM tbl_name WHERE SUBSTRING(str_col1,1,8) = 『title』;
原文網址:https://kknews.cc/zh-tw/other/qyk68zo.html
5.叢集索引的範例
cluster index seek
index_a_b_c(a,b,c)
符合的有where a , where a,b ,where a,b,c
where a,c雖然也有但實際是用index a
6.
索引的有序性規則是怎麼樣的呢?
index(c1,c2,c3)
c1=3 —> c2 有序,c3 無序 c1=3,c2=2 — > c3 有序 c1 in(1,2) —> c2 無序 ,c3 無序 原文網址:https://itw01.com/HI4EWB8.html
8.建index方法
create index afff on a.e(cc_id,content)
CREATE UNIQUE INDEX
alter table table_name add index index_name(a,b,c)
alter table table_name add unique index index_name(a,b,c)
ALTER TABLE table_name DROP INDEX index_name;
drop index afff on a.e
create table ccc(a int ,b int ,key asdf(a,b))
9.icp(index condition pushdown)
mysql 分 mysql server ,storage server
如果where可以用索引便會在storage從table取資料時用上index再回給mysql server
優點:減少mysql server訪問storage server 次數及storage server 訪問表的次數
ICP的优化在引擎层就能够过滤掉大量的数据
http://www.cnblogs.com/zhoujinyi/archive/2013/04/16/3016223.html
在没有ICP前,由于优化器只能只能使用前缀索引来过滤满足条件的查询,那么mysql只能够利用索引的第一个字段zipcode,来扫描XX表满足zipcode = 843000条件的记录,而后面的company和address由于使用了模糊查询,而不能在索引中继续过滤满足条件的记录,这样就导致了Server层对XX表的扫描增加了许多;
有了ICP,mysql在读取XX表前,继续检查满足company和address条件的记录,这个行为在引擎层完成。直接把过滤好的返回给Server层,就减少了Server层的操作。总之是把之前在SERVER层的下推到引擎层去处理。