q1:發現一些sql語句比較慢,怎麼去建立索引?
q2:在寫sql語句時,有哪些點會造成索引失效?
1.主鍵索引當給表建立了主鍵時,其他資料會按照主鍵來組織,這就是主鍵索引
2.唯一索引(unique)給一列設定了值是唯一的,不允許有重複值出現
3.普通索引(又叫二級索引或者普通索引)除了主鍵和唯一鍵建立的索引
4.全文索引類似檢索,5.6後innodb支援,貌似很少用
5.組合索引
innodb中使用了自適應雜湊索引,memory引擎使用的是雜湊索引staff表,有兩個索引,乙個是id主鍵索引,另乙個是組合索引(name,age,pos)雜湊索引:
基於雜湊表實現的,只有精確匹配索引所有列的查詢才有效
雜湊索引自身只需要儲存對應的hash值,所以索引的結構非常緊湊,這讓雜湊索引的查詢的速度非常快
雜湊索引的限制:
和索引中所有的列進行匹配
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資料結構來儲存索引的...