索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
資料庫使用索引以找到特定值,然後順指標找到包含該值的行。在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過儲存在索引中的rowid(相當於頁碼)快速找到表中對應的記錄。索引的建立是表中比較有指向性的字段,相當於目錄,比如說行政區域**,同乙個地域的行政區域**都是相同的,那麼給這一列加上索引,避免讓它重複掃瞄,從而達到優化的目的!
如何建立索引
在執行create table語句時可以建立索引,也可以單獨用create index或alter table來為表增加索引。
1、alter table
alter table用來建立普通索引、unique索引或primary key索引。
2、create index
create index可對表增加普通索引或unique索引。
3、索引型別
在建立索引時,可以規定索引能否包含重複值。如果不包含,則索引應該建立為primary key或unique索引。對於單列惟一性索引,這保證單列不包含重複的值。對於多列惟一性索引,保證多個值的組合不重複。
primary key索引和unique索引非常類似。
事實上,primary key索引僅是乙個具有名稱primary的unique索引。這表示乙個表只能包含乙個primary key,因為乙個表中不可能具有兩個同名的索引。
如何選擇合適的列建立索引
1、在where從句,group by從句,order by從句,on從句中的列新增索引
2、索引字段越小越好(因為資料庫資料儲存單位是以「頁」為單位的,資料儲存的越多,io也會越大)
3、離散度大的列放到聯合索引的前面
注意事項
設計好mysql的索引可以讓你的資料庫飛起來,大大的提高資料庫效率。設計mysql索引的時候有一下幾點注意:
1,建立索引
對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加索引的話,那麼查詢任何哪怕只是一條特定的資料都會進行一次全表掃瞄,如果一張表的資料量很大而符合條件的結果又很少,那麼不加索引會引起致命的效能下降。
但是也不是什麼情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什麼優勢,還會影響到更新速度,這被稱為過度索引。
2,復合索引
比如有一條語句是這樣的:select * from users where area=』beijing』 and age=22;
如果我們是在area和age上分別建立單個索引的話,由於mysql查詢每次只能使用乙個索引,所以雖然這樣已經相對不做索引時全表掃瞄提高了很多效率,但是如果在area、age兩列上建立復合索引的話將帶來更高的效率。如果我們建立了(area, age,salary)的復合索引,那麼其實相當於建立了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左字首特性。
因此我們在建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。
3,索引不會包含有null值的列
只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。
4,使用短索引
對字串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的 列,如果在前10 個或20 個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。
5,排序的索引問題
mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。
6,like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
7,不要在列上進行運算
select * from users where
year(adddate)
8,不使用not in操作
not in操作都不會使用索引將進行全表掃瞄。not in可以not exists代替
什麼是索引?
mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,...
什麼是索引?
mysql 資料庫舉例吧 一 什麼是索引?索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索...
什麼是索引
索引是幫助mysql高效獲取資料的排好序的資料結構 本質是一種優化查詢的資料結構 索引儲存在檔案裡 索引結構 索引底層的資料結構 二叉樹紅黑樹 hash b 樹存在表test,表的字段分別為 col 1和col 2,為該錶的col 2 字段新增索引。為了方便理解,假設索引底層用的資料結構是二叉搜尋樹...