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