MySQL中怎么使用索引的SQL類(lèi)型

本篇文章給大家分享的是有關(guān)MySQL中怎么使用索引的SQL類(lèi)型,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)朗縣,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575

1. 為什么使用索引

在無(wú)索引的情況下,MySQL會(huì)掃描整張表來(lái)查找符合sql條件的記錄,其時(shí)間開(kāi)銷(xiāo)與表中數(shù)據(jù)量呈正相關(guān)。對(duì)關(guān)系型數(shù)據(jù)表中的某些字段建索引可以極大提高查詢速度(當(dāng)然,不同字段是否selective會(huì)導(dǎo)致這些字段建立的索引對(duì)查詢速度的提升幅度不同,而且索引也并非越多越好,因?yàn)閷?xiě)入或刪除時(shí)需要更新索引信息)。

對(duì)于MySQL的Innodb儲(chǔ)存引擎來(lái)說(shuō),大部分類(lèi)型的index均以B-Tree數(shù)據(jù)結(jié)構(gòu)的變種B+Tree來(lái)存儲(chǔ)(MEMORY類(lèi)型的表還支持hash類(lèi)型的索引)。B-Tree是數(shù)據(jù)庫(kù)或文件系統(tǒng)中常用的一種數(shù)據(jù)結(jié)構(gòu),它是一種N叉平衡樹(shù),這種樹(shù)結(jié)構(gòu)保證了同層節(jié)點(diǎn)保存的key有序,對(duì)于某個(gè)節(jié)點(diǎn)來(lái)說(shuō),其左子樹(shù)保存的所有key均小于該節(jié)點(diǎn)保存的 key,其右子樹(shù)保存的所有key均大于該節(jié)點(diǎn)保存的key。此外,在工程實(shí)現(xiàn)上,還結(jié)合操作系統(tǒng)的局部性原理做了很多優(yōu)化,總之,b-tree的各種特性或優(yōu)化技巧能保證:1) 查詢磁盤(pán)記錄時(shí),讀盤(pán)次數(shù)最少;2) 任何insert和delete操作對(duì)樹(shù)結(jié)構(gòu)的影響均很小;3) 樹(shù)本身的rebalance操作很高效。

2. MySQL使用索引的場(chǎng)景

MySQL在以下操作場(chǎng)景下會(huì)使用索引:

1) 快速查找符合where條件的記錄

2) 快速確定候選集。若where條件使用了多個(gè)索引字段,則MySQL會(huì)優(yōu)先使用能使候選記錄集規(guī)模最小的那個(gè)索引,以便盡快淘汰不符合條件的記錄。

3) 如果表中存在幾個(gè)字段構(gòu)成的聯(lián)合索引,則查找記錄時(shí),這個(gè)聯(lián)合索引的最左前綴匹配字段也會(huì)被自動(dòng)作為索引來(lái)加速查找。

例如,若為某表創(chuàng)建了3個(gè)字段(c1, c2, c3)構(gòu)成的聯(lián)合索引,則(c1), (c1, c2), (c1, c2, c3)均會(huì)作為索引,(c2, c3)就不會(huì)被作為索引,而(c1, c3)其實(shí)只利用到c1索引。

4) 多表做join操作時(shí)會(huì)使用索引(如果參與join的字段在這些表中均建立了索引的話)

5) 若某字段已建立索引,求該字段的min()或max()時(shí),MySQL會(huì)使用索引

6) 對(duì)建立了索引的字段做sort或group操作時(shí),MySQL會(huì)使用索引

3. 哪些SQL語(yǔ)句會(huì)真正利用索引

從MySQL官網(wǎng)文檔"Comparison of B-Tree and Hash Indexes"可知,下面這些類(lèi)型的SQL可能會(huì)真正用到索引:

1) B-Tree可被用于sql中對(duì)列做比較的表達(dá)式,如=, >, >=, <, <=及between操作

2) 若like語(yǔ)句的條件是不以通配符開(kāi)頭的常量串,MySQL也會(huì)使用索引

比如,SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%'或SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%'可以利用索引,而SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%'(以通配符開(kāi)頭)和SELECT * FROM tbl_name WHERE key_col LIKE other_col(like條件不是常量串)無(wú)法利用索引。

對(duì)于形如LIKE '%string%'的sql語(yǔ)句,若通配符后面的string長(zhǎng)度大于3,則MySQL會(huì)利用Turbo Boyer-Moore algorithm算法進(jìn)行查找。

3) 若已對(duì)名為col_name的列建了索引,則形如"col_name is null"的SQL會(huì)用到索引

4) 對(duì)于聯(lián)合索引,sql條件中的最左前綴匹配字段會(huì)用到索引,示例請(qǐng)參考本文第2節(jié)第3條對(duì)聯(lián)合索引的說(shuō)明

5) 若sql語(yǔ)句中的where條件不只1個(gè)條件,則MySQL會(huì)進(jìn)行Index Merge優(yōu)化來(lái)縮小候選集范圍

以上就是MySQL中怎么使用索引的SQL類(lèi)型,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)名稱(chēng):MySQL中怎么使用索引的SQL類(lèi)型
文章源于:http://bm7419.com/article8/gippop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、軟件開(kāi)發(fā)移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站策劃網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)