假如你有一個表,
創(chuàng)新互聯(lián)建站長期為千余家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為東昌企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站設計,東昌網(wǎng)站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發(fā)。
SQL CREATE TABLE test_tab (2 id INT,
3 name VARCHAR(10),
4 age INT,
5 val VARCHAR(10)6 );你的業(yè)務,有一個查詢,是
SELECT * FROM test_tab WHERE name = 一個外部輸入的數(shù)據(jù)
剛開始,數(shù)據(jù)不多的時候,執(zhí)行效果還不錯。
隨著數(shù)據(jù)量的增加,這個查詢,執(zhí)行起來,越來越慢了。
然后在 name 上面 建立了索引
CREATE INDEX idx_test4_name ON test_tab (name );
這樣, 可以加快前面那個查詢的速度。
但是,某天,你執(zhí)行了下面這個SQL, 發(fā)現(xiàn)速度又慢了
SELECT * FROM test_tab WHERE age = 25
為啥呢? 因為 age 字段上面,沒有索引
索引只在 name 上面有
換句話說, 也就是 WHERE 里面的條件, 會自動判斷,有沒有 可用的索引,如果有, 該不該用。
多列索引,就是一個索引,包含了2個字段。
例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '張%'
AND age = 25
這樣的查詢,將能夠使用上面的索引。
多列索引,還有一個可用的情況就是, 某些情況下,可能查詢,只訪問索引就足夠了, 不需要再訪問表了。例如:SELECTAVG( avg ) AS 平均年齡FROMtest_tabWHEREname LIKE '張%'
這個時候, name 與 age 都包含在索引里面。 查詢不需要去檢索表中的數(shù)據(jù)。
sql會先過濾出last_name符合條件的記錄,在其基礎上在過濾first_name符合條件的記錄。
如果我們分別在last_name和first_name上創(chuàng)建兩個列索引,mysql的處理方式就不一樣了,它會選擇一個最嚴格的索引來進行檢索,可以理解為檢索能力最強的那個索引來檢索,另外一個利用不上了,這樣效果就不如多列索引了。
在mysql中,索引是一種特殊的數(shù)據(jù)庫結構,由數(shù)據(jù)表中的一列或多列組合而成,可以用來快速查詢數(shù)據(jù)表中有某一特定值的記錄。
通過索引,查詢數(shù)據(jù)時不用讀完記錄的所有信息,而只是查詢索引列即可。
通過索引,查詢數(shù)據(jù)時不用讀完記錄的所有信息,而只是查詢索引列。否則,數(shù)據(jù)庫系統(tǒng)將讀取每條記錄的所有信息進行匹配。
可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節(jié)省時間。
因此,使用索引可以很大程度上提高數(shù)據(jù)庫的查詢速度,還有效的提高了數(shù)據(jù)庫系統(tǒng)的性能。
索引的優(yōu)缺點
索引有其明顯的優(yōu)勢,也有其不可避免的缺點。
優(yōu)點
索引的優(yōu)點如下:
1、通過創(chuàng)建唯一索引可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
2、可以給所有的 MySQL 列類型設置索引。
3、可以大大加快數(shù)據(jù)的查詢速度,這是使用索引最主要的原因。
4、在實現(xiàn)數(shù)據(jù)的參考完整性方面可以加速表與表之間的連接。
5、在使用分組和排序子句進行數(shù)據(jù)查詢時也可以顯著減少查詢中分組和排序的時間
缺點
增加索引也有許多不利的方面,主要如下:
1、創(chuàng)建和維護索引組要耗費時間,并且隨著數(shù)據(jù)量的增加所耗費的時間也會增加。
2、索引需要占磁盤空間,除了數(shù)據(jù)表占數(shù)據(jù)空間以外,每一個索引還要占一定的物理空間。如果有大量的索引,索引文件可能比數(shù)據(jù)文件更快達到最大文件尺寸。
3、當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)維護,這樣就降低了數(shù)據(jù)的維護速度。
使用索引時,需要綜合考慮索引的優(yōu)點和缺點。