日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
建立數(shù)據(jù)庫(kù)索引的方法與步驟(如何建立數(shù)據(jù)庫(kù)索引)

隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),數(shù)據(jù)量的爆炸式增長(zhǎng)和數(shù)據(jù)庫(kù)技術(shù)不斷地進(jìn)步,數(shù)據(jù)庫(kù)索引作為提高數(shù)據(jù)庫(kù)查詢效率和性能的重要手段,成為了開發(fā)人員的必備技能之一。本文將介紹。

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)阿合奇免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

一、什么是數(shù)據(jù)庫(kù)索引

數(shù)據(jù)庫(kù)的索引是一種數(shù)據(jù)結(jié)構(gòu),她可以讓我們快速地定位到我們需要的數(shù)據(jù)。可以將索引看作是一本書的目錄,目錄里面記錄著具有唯一性的數(shù)據(jù),而在書中的各個(gè)章節(jié)則是非唯一性的數(shù)據(jù)。

簡(jiǎn)單來(lái)說(shuō),數(shù)據(jù)庫(kù)索引就是一種查找表,通過(guò)索引,我們可以快速地定位到我們需要的數(shù)據(jù)。

二、為什么需要建立索引

在大型應(yīng)用系統(tǒng)中,數(shù)據(jù)庫(kù)中常常會(huì)包含數(shù)百萬(wàn)、甚至數(shù)千萬(wàn)條記錄,這時(shí)如果在沒(méi)有索引的狀態(tài)下進(jìn)行查詢,查詢的效率將非常低下,可能需要耗費(fèi)幾秒、幾分鐘或者幾個(gè)小時(shí)來(lái)完成。在這種情況下,我們建立索引就可以大大提高查詢效率,縮短查詢時(shí)間,提高系統(tǒng)性能。

三、建立索引的策略

1.根據(jù)具體的業(yè)務(wù)來(lái)決定

在建立索引之前,必須先了解具體的業(yè)務(wù)需求,根據(jù)具體的業(yè)務(wù)來(lái)決定需要建立什么樣的索引,以及應(yīng)該建立在哪些列上。

2.對(duì)表進(jìn)行分析

在進(jìn)行索引的建立前,我們需要先對(duì)表進(jìn)行分析,從而得出最需要優(yōu)化的字段。

四、索引的種類

1. B樹索引

B樹索引是一種常用的索引類型,常見于MySQL、Oracle、SQL Server等數(shù)據(jù)庫(kù)中。

2. 哈希索引

哈希索引是一種高效、快速查找的索引類型。哈希索引在MySQL和Oracle中已經(jīng)有了實(shí)現(xiàn)。

3. 全文索引

全文索引能夠快速地定位到需要的數(shù)據(jù),MySQL、SQL Server、Oracle等數(shù)據(jù)庫(kù)都有實(shí)現(xiàn)。

五、建立B樹索引的步驟

1. 選擇需要建立索引的表

2. 分析表結(jié)構(gòu),選擇適合索引的列

3. 利用SQL語(yǔ)句創(chuàng)建索引

例如:

CREATE INDEX IndexName ON TableName (ColumnName)

4. 查看索引

可以使用SHOW INDEX FROM TableName語(yǔ)句查看已經(jīng)建立的索引。

六、如何避免過(guò)多的索引

雖然建立索引可以提高查詢效率,但是也會(huì)存在過(guò)多的索引會(huì)占用大量數(shù)據(jù)空間的問(wèn)題。下面介紹幾種避免過(guò)多索引問(wèn)題的方法:

1. 根據(jù)業(yè)務(wù)需求選擇適合的索引列;

2. 多列聯(lián)合建立索引;

3. 刪除不必要的索引。

七、

本文介紹了建立數(shù)據(jù)庫(kù)索引的方法和步驟,希望對(duì)讀者有所幫助。在進(jìn)行索引的建立前,需要對(duì)表進(jìn)行分析,選擇適合索引的列,利用SQL語(yǔ)句建立索引,并注意避免過(guò)多的索引問(wèn)題。通過(guò)建立索引,可以提高查詢效率,縮短查詢時(shí)間,提高系統(tǒng)性能。

相關(guān)問(wèn)題拓展閱讀:

  • mysql數(shù)據(jù)庫(kù)怎么創(chuàng)建索引

mysql數(shù)據(jù)庫(kù)怎么創(chuàng)建索引

普通索引 添加INDEX

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

下面演示下給user表的name字段添加一個(gè)索引

mysql數(shù)答賣據(jù)庫(kù)如何創(chuàng)建索引

mysql數(shù)據(jù)庫(kù)如何創(chuàng)建索引

主鍵索引 添加PRIMARY KEY

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

mysql數(shù)據(jù)庫(kù)如何創(chuàng)建索引

mysql數(shù)據(jù)庫(kù)如何清薯逗創(chuàng)建索引

唯一索引 添加UNIQUE

ALTER TABLE `table_name` ADD UNIQUE ( `column` )

mysql數(shù)據(jù)庫(kù)如何創(chuàng)建索引

全文手游索引 添加FULLTEXT

ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

mysql數(shù)據(jù)庫(kù)如何創(chuàng)建索引

如何添加多列索引

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

mysql數(shù)據(jù)庫(kù)如何創(chuàng)建索引

在滿足語(yǔ)句需求的情況下,盡量少的訪問(wèn)資源是數(shù)好帶據(jù)庫(kù)設(shè)計(jì)的重要原則,這和執(zhí)行的 SQL 有直接的關(guān)系,索引問(wèn)題又是 SQL 問(wèn)題中出現(xiàn)頻率更高的,常見的索引問(wèn)題包括:無(wú)索引(失效)、隱式轉(zhuǎn)換。1. SQL 執(zhí)行流程看一個(gè)問(wèn)題,在下面這個(gè)表 T 中,如果我要執(zhí)行 需要執(zhí)行幾次樹的搜索操作,會(huì)掃描多少行?

這分別是 ID 字段索引樹、k 字段索引樹。

這條 SQL 語(yǔ)句的執(zhí)行流程:

1. 在 k 索引樹上找到 k=3,獲得 ID=3002. 回表到 ID 索引樹查找 ID=300 的記錄,對(duì)應(yīng) R33. 在 k 索引樹找到下一個(gè)值 k=5,ID=5004. 再回到 ID 索引樹找到對(duì)應(yīng) ID=500 的 R4

5. 在 k 索引樹去下一個(gè)值 k=6,不符合條件,循環(huán)結(jié)束

這個(gè)過(guò)程讀取了 k 索引樹的三條記錄,回表了兩次。因?yàn)椴樵兘Y(jié)果所需要的數(shù)據(jù)只在主鍵索引上有源襪絕,所以必須得回表。所以,我們?cè)撊绾瓮ㄟ^(guò)優(yōu)化索引,來(lái)避免回表呢?2. 常見索引優(yōu)化2.1 覆蓋索引覆蓋索引雹姿,換言之就是索引要覆蓋我們的查詢請(qǐng)求,無(wú)需回表。

如果執(zhí)行的語(yǔ)句是 ,這樣的話因?yàn)?ID 的值在 k 索引樹上,就不需要回表了。

覆蓋索引可以減少樹的搜索次數(shù),顯著提升查詢性能,是常用的性能優(yōu)化手段。

但是,維護(hù)索引是有代價(jià)的,所以在建立冗余索引來(lái)支持覆蓋索引時(shí)要權(quán)衡利弊。

2.2 最左前綴原則

B+ 樹的數(shù)據(jù)項(xiàng)是復(fù)合的數(shù)據(jù)結(jié)構(gòu),比如 的時(shí)候,B+ 樹是按照從左到右的順序來(lái)建立搜索樹的,當(dāng) 這樣的數(shù)據(jù)來(lái)檢索的時(shí)候,B+ 樹會(huì)優(yōu)先比較 name 來(lái)確定下一步的檢索方向,如果 name 相同再依次比較 sex 和 age,最后得到檢索的數(shù)據(jù)。

可以清楚的看到,A1 使用 tl 索引,A2 進(jìn)行了全表掃描,雖然 A2 的兩個(gè)條件都在 tl 索引中出現(xiàn),但是沒(méi)有使用到 name 列,不符合最左前綴原則,無(wú)法使用索引。所以在建立聯(lián)合索引的時(shí)候,如何安排索引內(nèi)的字段排序是關(guān)鍵。評(píng)估標(biāo)準(zhǔn)是索引的復(fù)用能力,因?yàn)橹С肿钭笄熬Y,所以當(dāng)建立(a,b)這個(gè)聯(lián)合索引之后,就不需要給 a 單獨(dú)建立索引。原則上,如果通過(guò)調(diào)整順序,可以少維護(hù)一個(gè)索引,那么這個(gè)順序往往就是需要優(yōu)先考慮采用的。上面這個(gè)例子中,如果查詢條件里只有 b,就是沒(méi)法利用(a,b)這個(gè)聯(lián)合索引的,這時(shí)候就不得不維護(hù)另一個(gè)索引,也就是說(shuō)要同時(shí)維護(hù)(a,b)、(b)兩個(gè)索引。這樣的話,就需要考慮空間占用了,比如,name 和 age 的聯(lián)合索引,name 字段比 age 字段占用空間大,所以創(chuàng)建(name,age)聯(lián)合索引和(age)索引占用空間是要小于(age,name)、(name)索引的。

2.3 索引下推

以人員表的聯(lián)合索引(name, age)為例。如果現(xiàn)在有一個(gè)需求:檢索出表中“名字之一個(gè)字是張,而且年齡是26歲的所有男性”。那么,SQL 語(yǔ)句是這么寫的

通過(guò)最左前綴索引規(guī)則,會(huì)找到 ID1,然后需要判斷其他條件是否滿足在 MySQL 5.6 之前,只能從 ID1 開始一個(gè)個(gè)回表。到主鍵索引上找出數(shù)據(jù)行,再對(duì)比字段值。而 MySQL 5.6 引入的索引下推優(yōu)化(index condition pushdown),可以在索引遍歷過(guò)程中,對(duì)索引中包含的字段先做判斷,直接過(guò)濾掉不滿足條件的記錄,減少回表次數(shù)。這樣,減少了回表次數(shù)和之后再次過(guò)濾的工作量,明顯提高檢索速度。

2.4 隱式類型轉(zhuǎn)化

隱式類型轉(zhuǎn)化主要原因是,表結(jié)構(gòu)中指定的數(shù)據(jù)類型與傳入的數(shù)據(jù)類型不同,導(dǎo)致索引無(wú)法使用。所以有兩種方案:

修改表結(jié)構(gòu),修改字段數(shù)據(jù)類型。

修改應(yīng)用,將應(yīng)用中傳入的字符類型改為與表結(jié)構(gòu)相同類型。

3. 為什么會(huì)選錯(cuò)索引3.1 優(yōu)化器選擇索引是優(yōu)化器的工作,其目的是找到一個(gè)更優(yōu)的執(zhí)行方案,用最小的代價(jià)去執(zhí)行語(yǔ)句。在數(shù)據(jù)庫(kù)中,掃描行數(shù)是影響執(zhí)行代價(jià)的因素之一。掃描的行數(shù)越少,意味著訪問(wèn)磁盤數(shù)據(jù)的次數(shù)越少,消耗的 CPU 資源越少。當(dāng)然,掃描行數(shù)并不是唯一的判斷標(biāo)準(zhǔn),優(yōu)化器還會(huì)結(jié)合是否使用臨時(shí)表、是否排序等因素進(jìn)行綜合判斷。

3.2 掃描行數(shù)

MySQL 在真正開始執(zhí)行語(yǔ)句之前,并不能精確的知道滿足這個(gè)條件的記錄有多少條,只能通過(guò)索引的區(qū)分度來(lái)判斷。顯然,一個(gè)索引上不同的值越多,索引的區(qū)分度就越好,而一個(gè)索引上不同值的個(gè)數(shù)我們稱為“基數(shù)”,也就是說(shuō),這個(gè)基數(shù)越大,索引的區(qū)分度越好。

MySQL 使用采樣統(tǒng)計(jì)方法來(lái)估算基數(shù):采樣統(tǒng)計(jì)的時(shí)候,InnoDB 默認(rèn)會(huì)選擇 N 個(gè)數(shù)據(jù)頁(yè),統(tǒng)計(jì)這些頁(yè)面上的不同值,得到一個(gè)平均值,然后乘以這個(gè)索引的頁(yè)面數(shù),就得到了這個(gè)索引的基數(shù)。而數(shù)據(jù)表是會(huì)持續(xù)更新的,索引統(tǒng)計(jì)信息也不會(huì)固定不變。所以,當(dāng)變更的數(shù)據(jù)行數(shù)超過(guò) 1/M 的時(shí)候,會(huì)自動(dòng)觸發(fā)重新做一次索引統(tǒng)計(jì)。

在 MySQL 中,有兩種存儲(chǔ)索引統(tǒng)計(jì)的方式,可以通過(guò)設(shè)置參數(shù) innodb_stats_persistent 的值來(lái)選擇:

on 表示統(tǒng)計(jì)信息會(huì)持久化存儲(chǔ)。默認(rèn) N = 20,M = 10。

off 表示統(tǒng)計(jì)信息只存儲(chǔ)在內(nèi)存中。默認(rèn) N = 8,M = 16。

由于是采樣統(tǒng)計(jì),所以不管 N 是 20 還是 8,這個(gè)基數(shù)都很容易不準(zhǔn)確。所以,冤有頭債有主,MySQL 選錯(cuò)索引,還得歸咎到?jīng)]能準(zhǔn)確地判斷出掃描行數(shù)。

可以用 來(lái)重新統(tǒng)計(jì)索引信息,進(jìn)行修正。

3.3 索引選擇異常和處理1. 采用 force index 強(qiáng)行選擇一個(gè)索引。2. 可以考慮修改語(yǔ)句,引導(dǎo) MySQL 使用我們期望的索引。3. 有些場(chǎng)景下,可以新建一個(gè)更合適的索引,來(lái)提供給優(yōu)化器做選擇,或刪掉誤用的索引。

請(qǐng)點(diǎn)擊輸入圖片描述

如何建立數(shù)據(jù)庫(kù)索引的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于如何建立數(shù)據(jù)庫(kù)索引,建立數(shù)據(jù)庫(kù)索引的方法與步驟,mysql數(shù)據(jù)庫(kù)怎么創(chuàng)建索引的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


新聞名稱:建立數(shù)據(jù)庫(kù)索引的方法與步驟(如何建立數(shù)據(jù)庫(kù)索引)
轉(zhuǎn)載注明:http://www.5511xx.com/article/dphssod.html