MySQL索引 索引的分類和索引匹配

2021-10-25 17:39:45 字數 1535 閱讀 1438

q1:發現一些sql語句比較慢,怎麼去建立索引?

q2:在寫sql語句時,有哪些點會造成索引失效?

1.主鍵索引當給表建立了主鍵時,其他資料會按照主鍵來組織,這就是主鍵索引

2.唯一索引(unique)給一列設定了值是唯一的,不允許有重複值出現

3.普通索引(又叫二級索引或者普通索引)除了主鍵和唯一鍵建立的索引

4.全文索引類似檢索,5.6後innodb支援,貌似很少用

5.組合索引

innodb中使用了自適應雜湊索引,memory引擎使用的是雜湊索引

雜湊索引:

基於雜湊表實現的,只有精確匹配索引所有列的查詢才有效

雜湊索引自身只需要儲存對應的hash值,所以索引的結構非常緊湊,這讓雜湊索引的查詢的速度非常快

雜湊索引的限制:

staff表,有兩個索引,乙個是id主鍵索引,另乙個是組合索引(name,age,pos)

和索引中所有的列進行匹配

explain select * from staffs where name='july' and age=23 and pos='dev';
只匹配前面的幾列

explain select * from staffs where name='july' and age=23;

explain select * from staffs where name='july';

可以匹配某一列的值的開頭部分

explain select * from staffs where name like 'j%'; //會用到索引

explain select * from staffs where name like '%y'; //不會用到索引,索引失效,根本不知道的%是啥

/*如果使用索引時,出現了範圍條件(>,<,>=,<=)時,後面的索引不會用到,是索引失效的一種情況,如下*/

explain select * from staffs where name='jack' and age>20 and pos=10; //pos列索引不會被使用

可以查詢某乙個範圍的資料

explain select * from staffs where name>'mary';
explain select * from staffs where name='july' and age>23;
查詢的時候只需要訪問索引,不需要訪問資料行,本質上就是覆蓋索引

explain select name,age,pos from staffs where name='july' and age=23 and pos='dev';

mysql 索引劃分 MySQL索引分類

索引是一種特殊的檔案 innodb 資料表上的索引是表空間的乙個組成部分 它們包含著對資料表裡所有記錄的引用指標。索引不是萬能的,索引可以加快資料檢索操作,但會使資料修改操作變慢。每修改資料記錄,索引就必須重新整理一次。為了在某種程度上彌補這一缺陷,許多 sql 命令都有乙個 delay key w...

索引的分類 B Tree索引和Hash索引

索引是儲存引擎用來快速查詢記錄的一種資料結構,按照實現的方式有不同的種類,想b tree索引,hash索引,空間資料索引和全文索引等。下面主要說一下b tree索引和hash索引。人們在談論索引的時候如果沒有特別說明,一般指的是b tree索引。b tree索引是使用b tree資料結構來儲存索引的...

索引的分類 B Tree索引和Hash索引

索引是儲存引擎用來快速查詢記錄的一種資料結構,按照實現的方式有不同的種類,想b tree索引,hash索引,空間資料索引和全文索引等。下面主要說一下b tree索引和hash索引。人們在談論索引的時候如果沒有特別說明,一般指的是b tree索引。b tree索引是使用b tree資料結構來儲存索引的...