mysql 補建索引 mysql 索引補充

2021-10-18 10:20:36 字數 2911 閱讀 4050

1.unique索引補充:聯合唯一

unique(name,email)是name和email這兩列聯合起來唯一,不再試某個字段唯一2.主鍵索引,類似唯一索引,也是允許聯合多個字段作為主鍵,例如:primary(nid,name)3.組合索引,多列共同組成索引

注意:例如index(name,email)---->最左字首

select* from info where name='***' and email ='***' 是走索引的

select* from info where name='***'            是走索引的

select* from info where email ='***'          是不走索引的

索引分類:

普通索引:僅僅起到加速查詢作用

唯一索引:加速查詢+列值唯一(可以為null)

主鍵索引:加速查詢+列值唯一+表中只有乙個(不可以為null)

組合索引:多列值組合成乙個所有,專門用於組合搜尋,效率會大於索引合併

全文索引:對文字內容進行索引,進行搜尋,一般不會使用,會使用外掛程式等加速全文索引的查詢效率

檢視表中索引

show index from 表名

單獨建立索引

create index 名字 on 表(列)

獲取索引等級type:const(效率幾乎是最高的),all(全表掃瞄,效率最低),

等級劃分:

all:去資料表全表掃瞄

index:去索引表掃瞄

range:對索引列進行範圍查詢,除了!=和》符號以外的範圍操作

index_merge:合併索引,使用多個單列索引搜尋ref:根據索引查詢乙個或多個

eq_ref:唯一索引操作,只能拿到乙個資料const:常量,值匹配到一行

system:幾乎用不到

explain select * from info where name = '***' ---type:all/const/..

注意:不是建立了索引,就會加快查詢速率,若是建立索引,但是使用錯誤的方式去操作,會導致索引變慢,變成全表掃瞄(預設)。

例如:name沒有建立索引

select * from info where name='aaa';//第一條,但是其依舊會全表掃瞄

limit使用:在沒有建立索引時使用會加快查詢速率

select * from info where name='aaa' limit 1;//第一條,但是找到第一條後就返回,但是還是最後一條,搜尋還是非常慢的

但是正確的索引建立和使用會使查詢效率變得非常快

重點(正確使用索引)

1.like '%xx'

select * from info where name like '%三';

上面這種情況即使建立例索引,也不會去走這個索引

select * from info where name like '張%';

這種情況會走索引

2.使用函式

對索引列加函式也不能走索引,因為會對每乙個索引列的值都取出用函式處理,導致索引不能使用

select * from info where reverse(name) = '四李';//name是建立了索引的

修改,是函式新增到後面的資料上,只會執行一次函式

select * from info where name = reverse('四李');//name是建立了索引的

3.or作為條件

當兩邊中的列,若是一方沒有建立索引,則不能走索引,必須兩方都建立索引才行

4.型別不一致

select * from info where name='張三'; //name是建立的索引,型別varchar,一致可以走索引

但是select * from info where name=33; //name是建立的索引,型別varchar,資料為int型別,不一致不可以走索引

5.比較符號

大於和不等於不會走索引,會去全表掃瞄

6.order by

當根據索引排序的時候,選擇的對映如果不是索引,則不會走索引

select name from info order by age desc //age是所有,對映name也是索引

當對映不是索引不會走索引select score from info order by age desc //score不會是索引不會走索引

特別的,對於主鍵還是會走索引的

7.組合索引最左字首

補充:覆蓋索引

在建立索引時,會將索引和資料分為兩個檔案儲存

例如name建立索引了

select name from info where name='ls';

索引合併

單獨的索引,聯合使用select * from info where name='ls' and gender='1'; //index(name) index(gender)

組合索引

效率高於索引合併

組合索引select * from info where name='ls' and gender='1'; //index(name,gender)

注意事項

1.盡量少用select*,盡量少取多餘資料出來

2.count(1)或者count(列)代替count(*)

3.建立表的時候,盡量使用char,少使用varchar,char更易檢索

4.固定位元組int,char,tinyint等往前放,類似於結構體,固定長度的步長確定,易於跳轉,不定長度需要計算步長,動態操作

5.組合索引代替多個單列索引(當經常使用多個條件同時查詢時)

6.盡量使用短索引:像一堆字串,若是前面幾位已經不同,則不需要將所有的字串都建立索引,導致索引檔案過大,降低效率

7.使用連線join代替子查詢

8.連表示注意型別一致

9.所有雜湊值不適合建立索引,例如性別

mysql建索引 heidi MySql在索引優化

1.復合索引 比如有一條語句是這樣的 select from users where area beijing and age 22 如果我們是在area和age上分別建立單個索引的話,由於mysql查詢每次只能使用乙個索引,所以雖然這樣已經相對不做索引時全表掃瞄提高了很多效 率,但是如果在area...

mysql建表建索引6 mysql建表建索引

建表 create table sj projects id int 11 not null auto increment,title varchar 255 not null default comment 專案名稱 platform id int 11 not null default 0 co...

mysql 雜湊索引 MySQL索引之雜湊索引

雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...