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...