日韩无码专区无码一级三级片|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)銷(xiāo)解決方案
深入理解數(shù)據(jù)庫(kù)索引:實(shí)際例子解析(數(shù)據(jù)庫(kù)索引的例子)

在現(xiàn)代軟件開(kāi)發(fā)中,數(shù)據(jù)庫(kù)是不可或缺的一部分,而索引作為數(shù)據(jù)庫(kù)中的重要組成部分,可大幅提高查詢效率。然而,對(duì)于數(shù)據(jù)庫(kù)索引的理解程度卻是各不相同的。在本文中,我們將深入探討數(shù)據(jù)庫(kù)索引的相關(guān)知識(shí),并通過(guò)一些實(shí)際例子來(lái)解析數(shù)據(jù)庫(kù)索引的工作原理。

“專(zhuān)業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個(gè)人一直以來(lái)堅(jiān)持追求的企業(yè)文化。 創(chuàng)新互聯(lián)是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專(zhuān)業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專(zhuān)注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺(jué)傳達(dá),提供有針對(duì)性的項(xiàng)目解決方案,提供專(zhuān)業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場(chǎng),引領(lǐng)市場(chǎng)!

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

在深入了解數(shù)據(jù)庫(kù)索引之前,我們需要先明確一下數(shù)據(jù)庫(kù)索引的概念。簡(jiǎn)單來(lái)說(shuō),數(shù)據(jù)庫(kù)索引就是為了提高查詢效率而創(chuàng)建的一種數(shù)據(jù)結(jié)構(gòu),它將某些列的數(shù)據(jù)進(jìn)行預(yù)處理,以便更快地在該列上執(zhí)行查詢操作。

比如,我們?cè)谝粡埓鎯?chǔ)著大量用戶信息的數(shù)據(jù)表中,需要查詢名字為“張三”的用戶信息。如果沒(méi)有索引的話,系統(tǒng)會(huì)逐一檢查每一條記錄,直到找到對(duì)應(yīng)的記錄為止。而如果在該表的“姓名”列創(chuàng)建了索引,系統(tǒng)就可以直接跳轉(zhuǎn)到“姓名”索引中的“張三”記錄上,從而大幅提高查詢效率。

數(shù)據(jù)庫(kù)索引的類(lèi)型

常見(jiàn)的數(shù)據(jù)庫(kù)索引類(lèi)型包括了B-Tree索引、Hash索引和Full-text索引等。在這里我們就來(lái)簡(jiǎn)單介紹一下幾種索引:

1. B-Tree 索引

B-Tree 索引是一種樹(shù)型索引結(jié)構(gòu),它可以在 O(logN) 的時(shí)間復(fù)雜度內(nèi)定位到指定的記錄。它的創(chuàng)建方式是將數(shù)據(jù)表的某一列經(jīng)過(guò)排序后構(gòu)建成一棵平衡的 B-Tree 樹(shù)。每個(gè)節(jié)點(diǎn)均有指向當(dāng)前節(jié)點(diǎn)數(shù)據(jù)下限和上限之間的子節(jié)點(diǎn)的指針。當(dāng)查詢時(shí),系統(tǒng)將從根節(jié)點(diǎn)開(kāi)始進(jìn)行查找,逐漸向下查找子節(jié)點(diǎn),直到找到符合條件的記錄。

2. Hash 索引

Hash 索引是使用哈希表進(jìn)行建立的一種索引,它可以在 O(1) 的時(shí)間復(fù)雜度內(nèi)定位到指定記錄。當(dāng)建立 Hash 索引時(shí),會(huì)使用哈希函數(shù)將數(shù)據(jù)表的某一列經(jīng)過(guò)轉(zhuǎn)換后存儲(chǔ)到哈希表中,并記錄其在數(shù)據(jù)表中實(shí)際存儲(chǔ)位置。當(dāng)查詢時(shí),系統(tǒng)將使用同樣的哈希函數(shù)將查詢條件轉(zhuǎn)換成哈希值,并在哈希表中查找對(duì)應(yīng)記錄的存儲(chǔ)位置。

3. Full-text 索引

Full-text 索引是一種文本索引,它可以提高對(duì)文本類(lèi)數(shù)據(jù)進(jìn)行搜索的效率。當(dāng)建立 Full-text 索引時(shí),會(huì)對(duì)數(shù)據(jù)表中的文本列中的單詞進(jìn)行分詞,并將每個(gè)單詞進(jìn)行排序和紀(jì)錄位置,以便更快地執(zhí)行全文檢索操作。當(dāng)查詢時(shí),系統(tǒng)將搜索關(guān)鍵詞進(jìn)行分詞,并按照全文索引的方式在數(shù)據(jù)表的對(duì)應(yīng)列中進(jìn)行查找。

數(shù)據(jù)庫(kù)索引優(yōu)化的實(shí)例

現(xiàn)在我們來(lái)看一些實(shí)際例子,看一下如何通過(guò)優(yōu)化數(shù)據(jù)庫(kù)索引來(lái)提高查詢效率。

1.創(chuàng)建多列索引

在我們的用戶信息數(shù)據(jù)表中,我們需要查詢的往往不止是一個(gè)條件,可能需要同時(shí)查詢用戶是否在某地區(qū),或者同時(shí)查詢用戶的性別、年齡等信息。

下面是一個(gè)針對(duì)“地區(qū)+性別”這兩列的多列索引創(chuàng)建實(shí)例:

`CREATE INDEX region_sex_idx ON user_info(region, sex)`

在創(chuàng)建了上述多列索引后,我們即可在同時(shí)查詢“地區(qū)+性別”這兩個(gè)條件時(shí),實(shí)現(xiàn)更快速的索引查找。

2.在較長(zhǎng)文本列上建立Full-text 索引

對(duì)于某些存儲(chǔ)比較長(zhǎng)的文本列,如用戶的備注信息等,我們同樣可以通過(guò)全文檢索來(lái)提高查詢效率,而這就需要建立對(duì)應(yīng)列的Full-text索引。

下面是一個(gè)對(duì)“remarks”列創(chuàng)建Full-text索引的實(shí)例:

`CREATE FULLTEXT INDEX remarks_ft_idx ON user_info(remarks)`

在創(chuàng)建了上述Full-text索引后,我們即可在基于“remarks”列的全文檢索時(shí),實(shí)現(xiàn)更精準(zhǔn)的數(shù)據(jù)查詢。

3.考慮走索引的優(yōu)化

雖然索引可以幫助我們大幅提高查詢效率,但如果不考慮好走索引的問(wèn)題,同樣會(huì)降低效率,甚至還可能引發(fā)一些潛在的問(wèn)題。

下面是一個(gè)基于用戶表user_info的例子。在這個(gè)例子里,我們需要查詢出所有未婚女性用戶的信息。下面的SQL語(yǔ)句便是一種錯(cuò)誤的查詢方式:

`SELECT * FROM user_info WHERE sex=‘女’ AND marital_status=‘未婚’`

在上述查詢語(yǔ)句中,并沒(méi)有對(duì)marital_status列的索引進(jìn)行優(yōu)化,從而導(dǎo)致系統(tǒng)還需要逐條檢查所有記錄,從而耗費(fèi)大量時(shí)間。

正確的查詢方式應(yīng)該是:

`SELECT * FROM user_info WHERE marital_status=‘未婚’ AND sex=‘女’`

在這種方式下,系統(tǒng)將首先使用marital_status列上的索引來(lái)篩選出所有“未婚”用戶,然后再使用sex列的索引進(jìn)一步篩選出所有“女性”用戶,最終得到符合條件的記錄。

結(jié)論

通過(guò)本文的介紹,相信大家已經(jīng)掌握了一些關(guān)于數(shù)據(jù)庫(kù)索引的相關(guān)知識(shí)和優(yōu)化技巧。在實(shí)際的工作開(kāi)發(fā)中,我們需要根據(jù)自身的業(yè)務(wù)需求和數(shù)據(jù)庫(kù)性能瓶頸做出科學(xué)的索引優(yōu)化決策,從而實(shí)現(xiàn)更高效的數(shù)據(jù)庫(kù)操作,讓我們的業(yè)務(wù)更具可擴(kuò)展性和可靠性。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

mysql數(shù)據(jù)庫(kù)怎么建索引?

好難

MySQL數(shù)據(jù)庫(kù)建立索引步驟:

1、使用SQLPlus或者PLSQL登錄MySQL數(shù)據(jù)庫(kù)陪渣毀。

2、執(zhí)行語(yǔ)句create index indexname on table(col) tablespace tablespacename;其中

“indexname”為需要建立索引的索引蘆備名;

“table”是需要建立索引的表;

“col”為需梁殲要建立索引的字段列;

”tablespacename“為建立索引存放的空間(如果不需要制定表空間則使用“create index indexname on table(col)”)。

表名右擊,菜單里面就有索引,然后選擇要索引的字段。確定就可以了

create index 索引名稱(chēng) on 表

(

字段

);

MySql索引之哪些情況適合創(chuàng)建索引

說(shuō)明:不要以為唯一索引影響了 insert 速度,這個(gè)速度損耗可以忽略,但提高查找速度是明顯的。

某個(gè)字段在SELECT語(yǔ)句的 WHERE 條件中經(jīng)常被使用到,那么就需要給這個(gè)字段創(chuàng)建索引了。尤其是在

數(shù)據(jù)量大的情況下,創(chuàng)建普通索引就可以大幅提升數(shù)據(jù)查詢的效率。

比如student_info數(shù)據(jù)表(含100萬(wàn)條數(shù)據(jù)),假設(shè)我們想要查詢 student_id=的用戶信息。

索引就是讓數(shù)據(jù)按照某種順序進(jìn)行存儲(chǔ)或檢索,因此當(dāng)我們使用 GROUP BY 對(duì)數(shù)據(jù)進(jìn)行分組查詢,或者

使用 ORDER BY 對(duì)數(shù)據(jù)進(jìn)行排序的時(shí)候,就需要 對(duì)分組或者排序的字段進(jìn)行索引 。如果待排序的列有多

個(gè),那么可以在這些列上建立 組合索引 。

對(duì)數(shù)據(jù)按照某個(gè)條件進(jìn)行查詢后再進(jìn)行 UPDATE 或 DELETE 的操作,如果對(duì) WHERE 字段創(chuàng)建了索引,就

能大幅提升效率。原理是因?yàn)槲覀冃枰雀鶕?jù) WHERE 條首慧件列檢索出來(lái)這條記錄,然后再對(duì)它進(jìn)行更新或

刪除。如果進(jìn)行更新的時(shí)候,更新的字段是非索引字段頌譽(yù),提升的效率會(huì)更明顯,這是因?yàn)榉撬饕侄胃?/p>

新不需要對(duì)索引進(jìn)行維護(hù)。

有時(shí)候我們需要對(duì)某個(gè)字段進(jìn)行去重,使用 DISTINCT,那么對(duì)這個(gè)字段創(chuàng)建索引,也會(huì)提升查詢效率。

比如,我們想要查詢課程表中不同的 student_id 都有哪些,如果我們沒(méi)有對(duì) student_id 創(chuàng)建索引,執(zhí)行

SQL 語(yǔ)句:

運(yùn)行結(jié)果(條記錄,運(yùn)行時(shí)間 0.683s ):

如果我們對(duì) student_id 創(chuàng)建索引,再執(zhí)者櫻答行 SQL 語(yǔ)句:

運(yùn)行結(jié)果(條記錄,運(yùn)行時(shí)間 0.010s ):

你能看到 SQL 查詢效率有了提升,同時(shí)顯示出來(lái)的 student_id 還是按照 遞增的順序 進(jìn)行展示的。這是因

為索引會(huì)對(duì)數(shù)據(jù)按照某種順序進(jìn)行排序,所以在去重的時(shí)候也會(huì)快很多。

首先, 連接表的數(shù)量盡量不要超過(guò) 3 張 ,因?yàn)槊吭黾右粡埍砭拖喈?dāng)于增加了一次嵌套的循環(huán),數(shù)量級(jí)增

長(zhǎng)會(huì)非???,嚴(yán)重影響查詢的效率。

其次, 對(duì) WHERE 條件創(chuàng)建索引 ,因?yàn)?WHERE 才是對(duì)數(shù)據(jù)條件的過(guò)濾。如果在數(shù)據(jù)量非常大的情況下,

沒(méi)有 WHERE 條件過(guò)濾是非??膳碌?。

最后, 對(duì)用于連接的字段創(chuàng)建索引 ,并且該字段在多張表中的 類(lèi)型必須一致 。比如 course_id 在

student_info 表和 course 表中都為 int(11) 類(lèi)型,而不能一個(gè)為 int 另一個(gè)為 varchar 類(lèi)型。

舉個(gè)例子,如果我們只對(duì) student_id 創(chuàng)建索引,執(zhí)行 SQL 語(yǔ)句:

運(yùn)行結(jié)果(1 條數(shù)據(jù),運(yùn)行時(shí)間 0.189s ):

這里我們對(duì) name 創(chuàng)建索引,再執(zhí)行上面的 SQL 語(yǔ)句,運(yùn)行時(shí)間為 0.002s 。

創(chuàng)建一張商戶表,因?yàn)榈刂纷侄伪容^長(zhǎng),在地址字段上建立前綴索引

問(wèn)題是,截取多少呢?截取得多了,達(dá)不到節(jié)省索引存儲(chǔ)空間的目的;截取得少了,重復(fù)內(nèi)容太多,字

段的散列度(選擇性)會(huì)降低。

怎么計(jì)算不同的長(zhǎng)度的選擇性呢?

先看一下字段在全部數(shù)據(jù)中的選擇度:

通過(guò)不同長(zhǎng)度去計(jì)算,與全表的選擇性對(duì)比:

公式:

例如:

引申另一個(gè)問(wèn)題:索引列前綴對(duì)排序的影響

拓展:Alibaba《Java開(kāi)發(fā)手冊(cè)》

【 強(qiáng)制 】在 varchar 字段上建立索引時(shí),必須指定索引長(zhǎng)度,沒(méi)必要對(duì)全字段建立索引,根據(jù)實(shí)際文本

區(qū)分度決定索引長(zhǎng)度。

說(shuō)明:索引的長(zhǎng)度與區(qū)分度是一對(duì)矛盾體,一般對(duì)字符串類(lèi)型數(shù)據(jù),長(zhǎng)度為 20 的索引,區(qū)分度會(huì) 高達(dá)

90% 以上 ,可以使用 count(distinct left(列名, 索引長(zhǎng)度))/count(*)的區(qū)分度來(lái)確定。

這樣也可以較少的建立一些索引。同時(shí),由于”最左前綴原則”,可以增加聯(lián)合索引的使用率。

結(jié)論:在數(shù)據(jù)表中的數(shù)據(jù)行數(shù)比較少的情況下,比如不到 1000 行,是不需要?jiǎng)?chuàng)建索引的。

舉例1:要在 100 萬(wàn)行數(shù)據(jù)中查找其中的 50 萬(wàn)行(比如性別為男的數(shù)據(jù)),一旦創(chuàng)建了索引,你需要先

訪問(wèn) 50 萬(wàn)次索引,然后再訪問(wèn) 50 萬(wàn)次數(shù)據(jù)表,這樣加起來(lái)的開(kāi)銷(xiāo)比不使用索引可能還要大。

舉例2:假設(shè)有一個(gè)學(xué)生表,學(xué)生總數(shù)為 100 萬(wàn)人,男性只有 10 個(gè)人,也就是占總?cè)丝诘?10 萬(wàn)分之 1。

學(xué)生表 student_gender 結(jié)構(gòu)如下。其中數(shù)據(jù)表中的 student_gender 字段取值為 0 或 1,0 代表女性,1 代

表男性。

如果我們要篩選出這個(gè)學(xué)生表中的男性,可以使用:

運(yùn)行結(jié)果(10 條數(shù)據(jù),運(yùn)行時(shí)間 0.696s ):

結(jié)論:當(dāng)數(shù)據(jù)重復(fù)度大,比如 高于 10% 的時(shí)候,也不需要對(duì)這個(gè)字段使用索引。

例如身份證、UUID(在索引比較時(shí)需要轉(zhuǎn)為ASCII,并且插入時(shí)可能造成頁(yè)分裂)、MD5、HASH、無(wú)序長(zhǎng)字

符串等。

① 冗余索引

舉例:建表語(yǔ)句如下

我們知道,通過(guò) idx_name_birthday_phone_number 索引就可以對(duì) name 列進(jìn)行快速搜索,再創(chuàng)建一

個(gè)專(zhuān)門(mén)針對(duì) name 列的索引就算是一個(gè) 冗余索引 ,維護(hù)這個(gè)索引只會(huì)增加維護(hù)的成本,并不會(huì)對(duì)搜索有

什么好處。

② 重復(fù)索引

另一種情況,我們可能會(huì)對(duì)某個(gè)列 重復(fù)建立索引 ,比方說(shuō)這樣:

我們看到,col1 既是主鍵、又給它定義為一個(gè)唯一索引,還給它定義了一個(gè)普通索引,可是主鍵本身就

會(huì)生成聚簇索引,所以定義的唯一索引和普通索引是重復(fù)的,這種情況要避免。

歡迎共同進(jìn)步:

QQ群:

關(guān)于數(shù)據(jù)庫(kù)索引的例子的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

創(chuàng)新互聯(lián)-老牌IDC、云計(jì)算及IT信息化服務(wù)領(lǐng)域的服務(wù)供應(yīng)商,業(yè)務(wù)涵蓋IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心)服務(wù)、云計(jì)算服務(wù)、IT信息化、AI算力租賃平臺(tái)(智算云),軟件開(kāi)發(fā),網(wǎng)站建設(shè),咨詢熱線:028-86922220


網(wǎng)站欄目:深入理解數(shù)據(jù)庫(kù)索引:實(shí)際例子解析(數(shù)據(jù)庫(kù)索引的例子)
分享URL:http://m.5511xx.com/article/cdppdep.html