mysql 查詢效率優(yōu)化之 常用索引的幾種類型 新手使用教程骡尽,少走彎路威恼?
字?jǐn)?shù)1068閱讀27評論0喜歡0
Mysql常見索引有:主鍵索引积仗、唯一索引疆拘、普通索引、全文索引寂曹、組合索引(聯(lián)合索引哎迄,多列索引)
一、建立的方法介紹
1隆圆、PRIMARY KEY(主鍵索引) 的建立方法
ALTER TABLE 表明 ADD PRIMARY KEY ( 列名)漱挚;
一般都是在建立表的時候自己就設(shè)置好了 自增長不為空的主鍵默認(rèn)id
2、UNIQUE(唯一索引) 的建立方法
ALTER TABLE 表明 ?ADD UNIQUE (列名)渺氧;
3旨涝、INDEX(普通索引) ?的建立方法
ALTER ?TABLE ?表明 ? ADD ?INDEX ? 索引名 ( 列名 ) ?//使用時候直接把文字替換為你的表名和列名就好
4、FULLTEXT(全文索引) 的建立方法
ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
5阶女、組合索引 的建立方法? 和 (聯(lián)合索引颊糜,多列索引)都是一個意思
ALTER TABLE ?`table_name` ?ADD INDEX ?index_name ( `column1`, `column2`, `column3` )
//==============================================================
二、各索引的使用方法
1秃踩、【主鍵索引】就不介紹了 ?都知道 ? 具有唯一性和自增長性衬鱼,查詢效率最快
2、【唯一索引】 與 ?"普通索引"類似憔杨,不同的就是:索引列的值必須唯一鸟赫,但允許有空值。 如果想限制用戶添加數(shù)據(jù)時候防止重復(fù)添加就可以 將 判斷的字段設(shè)置為唯一索引來達(dá)到目的消别。
3抛蚤、【普通索引】在查詢中經(jīng)常出現(xiàn),特別百萬級別或千萬級別的數(shù)據(jù)量寻狂,使用普通索引會有特別顯著的效果
比如:單個where ?條件的字段查詢 就可以將條件字段設(shè)置為普通索引來提高查詢效率岁经。
SELECT*FRO ?表明 ?WHREE ?username="username";
4蛇券、【組合索引】經(jīng)常在多個where條件的查詢語句中出現(xiàn)缀壤。
SELECT*FROM? 表明? WHREE? username="username" AND? password="password"
那么username和password就可以設(shè)置為兩列的組合索引樊拓,組合索引遵循”最左前綴“原則。索引列順序和查詢列同步效果才能體現(xiàn)塘慕,不要覺得誰在前誰在后無所謂筋夏,為了好的編程習(xí)慣和兼容還是同步順序的好。
加深組合索引的使用方法:
我們限制建立三列組合索引且順序是:ALTER TABLE? `table_name`? ADD INDEX? index_name ( `column1`, `column2`, `column3` )
那么我們查詢語句中能夠讓組合索引起效果的查詢方法是:
正確方法如下:
<1> ?SELECT*FROM? `table_name`? WHREE? column1="column1" AND? column2="column2"? AND? column3="column3";
<2> SELECT*FROM? `table_name`? WHREE? column1="column1" AND? column2="column2"
<3> SELECT*FROM? `table_name`? WHREE? column1="column1"
錯誤如下:
<1>? SELECT*FROM? `table_name`? WHREE? column2="column2"? AND? column3="column3" ? and ?column1="column1"图呢;
<2> SELECT*FROM? `table_name`? WHREE? column2="column2" AND? column3="column3"
<3> SELECT*FROM? `table_name`? WHREE? column2="column2"? 或 SELECT*FROM? `table_name`? WHREE? column3="column3" 都是錯誤的索引調(diào)用方式条篷,且組合索引不會起效果,也就是說沒有起到優(yōu)化的作用蛤织。
在這個時候我們就可以多建立一個普通索引或組合索引來配合多條件的查詢語句赴叹。
SELECT*FROM? table_name? WHERE? ? 字段? like? '關(guān)鍵詞%'
會使用索引,而
SELECT ?* FROM? table_name? WHERE? ? 字段? like? '%關(guān)鍵詞' 不會使用索引
三稚瘾、索引的不足之處
上面說了那么多索引的好話,它真的有像傳說中那么優(yōu)秀么姚炕?當(dāng)然會有缺點(diǎn)了摊欠。
1.雖然索引大大提高了查詢速度,同時卻會降低更新表的速度柱宦,如對表進(jìn)行INSERT些椒、UPDATE和DELETE。因?yàn)楦卤頃r掸刊,MySQL不僅要保存數(shù)據(jù)免糕,還要保存一下索引文件
2.建立索引會占用磁盤空間的索引文件。一般情況這個問題不太嚴(yán)重忧侧,但如果你在一個大表上創(chuàng)建了多種組合索引石窑,索引文件的會膨脹很快。