一.索引的作用
一般的應(yīng)用系統(tǒng),讀寫比例在10:1左右,而且插入操作和一般的更新操作很少出現(xiàn)性能問(wèn)題,遇到最多的,也是最容易出問(wèn)題的,還是一些復(fù)雜的查詢操作,所以查詢語(yǔ)句的優(yōu)化顯然是重中之重。
在數(shù)據(jù)量和訪問(wèn)量不大的情況下,mysql訪問(wèn)是非常快的,是否加索引對(duì)訪問(wèn)影響不大。但是當(dāng)數(shù)據(jù)量和訪問(wèn)量劇增的時(shí)候,就會(huì)發(fā)現(xiàn)mysql變慢,甚至down掉,這就必須要考慮優(yōu)化sql了,給數(shù)據(jù)庫(kù)建立正確合理的索引,是mysql優(yōu)化的一個(gè)重要手段。
索引的目的在于提高查詢效率,可以類比字典,如果要查“mysql”這個(gè)單詞,我們肯定需要定位到m字母,然后從下往下找到y(tǒng)字母,再找到剩下的sql。如果沒(méi)有索引,那么你可能需要把所有單詞看一遍才能找到你想要的。除了詞典,生活中隨處可見(jiàn)索引的例子,如火車站的車次表、圖書的目錄等。它們的原理都是一樣的,通過(guò)不斷的縮小想要獲得數(shù)據(jù)的范圍來(lái)篩選出最終想要的結(jié)果,同時(shí)把隨機(jī)的事件變成順序的事件,也就是我們總是通過(guò)同一種查找方式來(lái)鎖定數(shù)據(jù)。
在創(chuàng)建索引時(shí),需要考慮哪些列會(huì)用于 SQL 查詢,然后為這些列創(chuàng)建一個(gè)或多個(gè)索引。事實(shí)上,索引也是一種表,保存著主鍵或索引字段,以及一個(gè)能將每個(gè)記錄指向?qū)嶋H表的指針。數(shù)據(jù)庫(kù)用戶是看不到索引的,它們只是用來(lái)加速查詢的。數(shù)據(jù)庫(kù)搜索引擎使用索引來(lái)快速定位記錄。
INSERT 與 UPDATE 語(yǔ)句在擁有索引的表中執(zhí)行會(huì)花費(fèi)更多的時(shí)間,而SELECT 語(yǔ)句卻會(huì)執(zhí)行得更快。這是因?yàn)椋谶M(jìn)行插入或更新時(shí),數(shù)據(jù)庫(kù)也需要插入或更新索引值。
二.索引的創(chuàng)建、刪除
索引的類型:
(1)使用ALTER TABLE語(yǔ)句創(chuàng)建索性
應(yīng)用于表創(chuàng)建完畢之后再添加。
| ALTER TABLE 表名 ADD 索引類型 (unique,primary key,fulltext,index)[索引名](字段名) | 
| //普通索引alter table table_name add index index_name (column_list) ;//唯一索引alter table table_name add unique (column_list) ;//主鍵索引alter table table_name add primary key (column_list) ; | 
ALTER TABLE可用于創(chuàng)建普通索引、UNIQUE索引和PRIMARY KEY索引3種索引格式,table_name是要增加索引的表名,column_list指出對(duì)哪些列進(jìn)行索引,多列時(shí)各列之間用逗號(hào)分隔。索引名index_name可選,缺省時(shí),MySQL將根據(jù)第一個(gè)索引列賦一個(gè)名稱。另外,ALTER TABLE允許在單個(gè)語(yǔ)句中更改多個(gè)表,因此可以同時(shí)創(chuàng)建多個(gè)索引。
新聞熱點(diǎn)
疑難解答
圖片精選