0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么說(shuō)B+比B樹更適合實(shí)際應(yīng)用中操作系統(tǒng)的文件索引和數(shù)據(jù)庫(kù)索引?

電子工程師 ? 來(lái)源:lp ? 2019-04-04 14:25 ? 次閱讀

一、為什么用自增列作為主鍵

1、如果我們定義了主鍵(PRIMARY KEY),那么InnoDB會(huì)選擇主鍵作為聚集索引、如果沒有顯式定義主鍵,則InnoDB會(huì)選擇第一個(gè)不包含有NULL值的唯一索引作為主鍵索引、如果也沒有這樣的唯一索引,則InnoDB會(huì)選擇內(nèi)置6字節(jié)長(zhǎng)的ROWID作為隱含的聚集索引(ROWID隨著行記錄的寫入而主鍵遞增,這個(gè)ROWID不像ORACLE的ROWID那樣可引用,是隱含的)。

2、數(shù)據(jù)記錄本身被存于主索引(一顆B+Tree)的葉子節(jié)點(diǎn)上。這就要求同一個(gè)葉子節(jié)點(diǎn)內(nèi)(大小為一個(gè)內(nèi)存頁(yè)或磁盤頁(yè))的各條數(shù)據(jù)記錄按主鍵順序存放,因此每當(dāng)有一條新的記錄插入時(shí),MySQL會(huì)根據(jù)其主鍵將其插入適當(dāng)?shù)墓?jié)點(diǎn)和位置,如果頁(yè)面達(dá)到裝載因子(InnoDB默認(rèn)為15/16),則開辟一個(gè)新的頁(yè)(節(jié)點(diǎn))

3、如果表使用自增主鍵,那么每次插入新的記錄,記錄就會(huì)順序添加到當(dāng)前索引節(jié)點(diǎn)的后續(xù)位置,當(dāng)一頁(yè)寫滿,就會(huì)自動(dòng)開辟一個(gè)新的頁(yè)

4、如果使用非自增主鍵(如果身份證號(hào)或?qū)W號(hào)等),由于每次插入主鍵的值近似于隨機(jī),因此每次新紀(jì)錄都要被插到現(xiàn)有索引頁(yè)得中間某個(gè)位置,此時(shí)MySQL不得不為了將新記錄插到合適位置而移動(dòng)數(shù)據(jù),甚至目標(biāo)頁(yè)面可能已經(jīng)被回寫到磁盤上而從緩存中清掉,此時(shí)又要從磁盤上讀回來(lái),這增加了很多開銷,同時(shí)頻繁的移動(dòng)、分頁(yè)操作造成了大量的碎片,得到了不夠緊湊的索引結(jié)構(gòu),后續(xù)不得不通過(guò)OPTIMIZE TABLE來(lái)重建表并優(yōu)化填充頁(yè)面。

二、為什么使用數(shù)據(jù)索引能提高效率

1、數(shù)據(jù)索引的存儲(chǔ)是有序的

2、在有序的情況下,通過(guò)索引查詢一個(gè)數(shù)據(jù)是無(wú)需遍歷索引記錄的

3、極端情況下,數(shù)據(jù)索引的查詢效率為二分法查詢效率,趨近于 log2(N)

三、B+樹索引和哈希索引的區(qū)別

B+樹是一個(gè)平衡的多叉樹,從根節(jié)點(diǎn)到每個(gè)葉子節(jié)點(diǎn)的高度差值不超過(guò)1,而且同層級(jí)的節(jié)點(diǎn)間有指針相互鏈接,是有序的

哈希索引就是采用一定的哈希算法,把鍵值換算成新的哈希值,檢索時(shí)不需要類似B+樹那樣從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)逐級(jí)查找,只需一次哈希算法即可,是無(wú)序的

四、哈希索引的優(yōu)勢(shì)

1、等值查詢。哈希索引具有絕對(duì)優(yōu)勢(shì)(前提是:沒有大量重復(fù)鍵值,如果大量重復(fù)鍵值時(shí),哈希索引的效率很低,因?yàn)榇嬖谒^的哈希碰撞問題。)

五、哈希索引不適用的場(chǎng)景

1、不支持范圍查詢

2、不支持索引完成排序

3、不支持聯(lián)合索引的最左前綴匹配規(guī)則

通常,B+樹索引結(jié)構(gòu)適用于絕大多數(shù)場(chǎng)景,像下面這種場(chǎng)景用哈希索引才更有優(yōu)勢(shì):

在HEAP表中,如果存儲(chǔ)的數(shù)據(jù)重復(fù)度很低(也就是說(shuō)基數(shù)很大),對(duì)該列數(shù)據(jù)以等值查詢?yōu)橹鳎瑳]有范圍查詢、沒有排序的時(shí)候,特別適合采用哈希索引,例如這種SQL:

selectid,namefromtablewherename='李明'; — 僅等值查詢

而常用的InnoDB引擎中默認(rèn)使用的是B+樹索引,它會(huì)實(shí)時(shí)監(jiān)控表上索引的使用情況,如果認(rèn)為建立哈希索引可以提高查詢效率,則自動(dòng)在內(nèi)存中的“自適應(yīng)哈希索引緩沖區(qū)”建立哈希索引(在InnoDB中默認(rèn)開啟自適應(yīng)哈希索引),通過(guò)觀察搜索模式,MySQL會(huì)利用index key的前綴建立哈希索引,如果一個(gè)表幾乎大部分都在緩沖池中,那么建立一個(gè)哈希索引能夠加快等值查詢。

注意:在某些工作負(fù)載下,通過(guò)哈希索引查找?guī)?lái)的性能提升遠(yuǎn)大于額外的監(jiān)控索引搜索情況和保持這個(gè)哈希表結(jié)構(gòu)所帶來(lái)的開銷。但某些時(shí)候,在負(fù)載高的情況下,自適應(yīng)哈希索引中添加的read/write鎖也會(huì)帶來(lái)競(jìng)爭(zhēng),比如高并發(fā)的join操作。like操作和%的通配符操作也不適用于自適應(yīng)哈希索引,可能要關(guān)閉自適應(yīng)哈希索引。

六、B樹和B+樹的區(qū)別

1、B樹,每個(gè)節(jié)點(diǎn)都存儲(chǔ)key和data,所有節(jié)點(diǎn)組成這棵樹,并且葉子節(jié)點(diǎn)指針為nul,葉子結(jié)點(diǎn)不包含任何關(guān)鍵字信息。

2、B+樹,所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含有這些關(guān)鍵字記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大的順序鏈接,所有的非終端結(jié)點(diǎn)可以看成是索引部分,結(jié)點(diǎn)中僅含有其子樹根結(jié)點(diǎn)中最大(或最?。╆P(guān)鍵字。 (而B 樹的非終節(jié)點(diǎn)也包含需要查找的有效信息)

七、為什么說(shuō)B+比B樹更適合實(shí)際應(yīng)用中操作系統(tǒng)的文件索引和數(shù)據(jù)庫(kù)索引?

1、B+的磁盤讀寫代價(jià)更低B+的內(nèi)部結(jié)點(diǎn)并沒有指向關(guān)鍵字具體信息的指針。因此其內(nèi)部結(jié)點(diǎn)相對(duì)B樹更小。如果把所有同一內(nèi)部結(jié)點(diǎn)的關(guān)鍵字存放在同一盤塊中,那么盤塊所能容納的關(guān)鍵字?jǐn)?shù)量也越多。一次性讀入內(nèi)存中的需要查找的關(guān)鍵字也就越多。相對(duì)來(lái)說(shuō)IO讀寫次數(shù)也就降低了。

2、B+-tree的查詢效率更加穩(wěn)定由于非終結(jié)點(diǎn)并不是最終指向文件內(nèi)容的結(jié)點(diǎn),而只是葉子結(jié)點(diǎn)中關(guān)鍵字的索引。所以任何關(guān)鍵字的查找必須走一條從根結(jié)點(diǎn)到葉子結(jié)點(diǎn)的路。所有關(guān)鍵字查詢的路徑長(zhǎng)度相同,導(dǎo)致每一個(gè)數(shù)據(jù)的查詢效率相當(dāng)。

八、MySQL聯(lián)合索引

1、聯(lián)合索引是兩個(gè)或更多個(gè)列上的索引。對(duì)于聯(lián)合索引:Mysql從左到右的使用索引中的字段,一個(gè)查詢可以只使用索引中的一部份,但只能是最左側(cè)部分。例如索引是key index (a,b,c). 可以支持a 、 a,b 、 a,b,c 3種組合進(jìn)行查找,但不支持 b,c進(jìn)行查找 .當(dāng)最左側(cè)字段是常量引用時(shí),索引就十分有效。

2、利用索引中的附加列,您可以縮小搜索的范圍,但使用一個(gè)具有兩列的索引 不同于使用兩個(gè)單獨(dú)的索引。復(fù)合索引的結(jié)構(gòu)與電話簿類似,人名由姓和名構(gòu)成,電話簿首先按姓氏對(duì)進(jìn)行排序,然后按名字對(duì)有相同姓氏的人進(jìn)行排序。如果您知 道姓,電話簿將非常有用;如果您知道姓和名,電話簿則更為有用,但如果您只知道名不姓,電話簿將沒有用處。

九、什么情況下應(yīng)不建或少建索引

1、表記錄太少

2、經(jīng)常插入、刪除、修改的表

3、數(shù)據(jù)重復(fù)且分布平均的表字段,假如一個(gè)表有10萬(wàn)行記錄,有一個(gè)字段A只有T和F兩種值,且每個(gè)值的分布概率大約為50%,那么對(duì)這種表A字段建索引一般不會(huì)提高數(shù)據(jù)庫(kù)的查詢速度。

4、經(jīng)常和主字段一塊查詢但主字段索引值比較多的表字段

十、什么是表分區(qū)?

表分區(qū),是指根據(jù)一定規(guī)則,將數(shù)據(jù)庫(kù)中的一張表分解成多個(gè)更小的,容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個(gè)物理分區(qū)組成。

十一、表分區(qū)與分表的區(qū)別

分表:指的是通過(guò)一定規(guī)則,將一張表分解成多張不同的表。比如將用戶訂單記錄根據(jù)時(shí)間成多個(gè)表。

分表與分區(qū)的區(qū)別在于:分區(qū)從邏輯上來(lái)講只有一張表,而分表則是將一張表分解成多張表。

十二、表分區(qū)有什么好處?

1、分區(qū)表的數(shù)據(jù)可以分布在不同的物理設(shè)備上,從而高效地利用多個(gè)硬件設(shè)備。 2. 和單個(gè)磁盤或者文件系統(tǒng)相比,可以存儲(chǔ)更多數(shù)據(jù)

2、優(yōu)化查詢。在where語(yǔ)句中包含分區(qū)條件時(shí),可以只掃描一個(gè)或多個(gè)分區(qū)表來(lái)提高查詢效率;涉及sum和count語(yǔ)句時(shí),也可以在多個(gè)分區(qū)上并行處理,最后匯總結(jié)果。

3、分區(qū)表更容易維護(hù)。例如:想批量刪除大量數(shù)據(jù)可以清除整個(gè)分區(qū)。

4、可以使用分區(qū)表來(lái)避免某些特殊的瓶頸,例如InnoDB的單個(gè)索引的互斥訪問,ext3問價(jià)你系統(tǒng)的inode鎖競(jìng)爭(zhēng)等。

十三、分區(qū)表的限制因素

1、一個(gè)表最多只能有1024個(gè)分區(qū)

2、MySQL5.1中,分區(qū)表達(dá)式必須是整數(shù),或者返回整數(shù)的表達(dá)式。在MySQL5.5中提供了非整數(shù)表達(dá)式分區(qū)的支持。

3、如果分區(qū)字段中有主鍵或者唯一索引的列,那么多有主鍵列和唯一索引列都必須包含進(jìn)來(lái)。即:分區(qū)字段要么不包含主鍵或者索引列,要么包含全部主鍵和索引列。

4、分區(qū)表中無(wú)法使用外鍵約束

5、MySQL的分區(qū)適用于一個(gè)表的所有數(shù)據(jù)和索引,不能只對(duì)表數(shù)據(jù)分區(qū)而不對(duì)索引分區(qū),也不能只對(duì)索引分區(qū)而不對(duì)表分區(qū),也不能只對(duì)表的一部分?jǐn)?shù)據(jù)分區(qū)。

十四、如何判斷當(dāng)前MySQL是否支持分區(qū)?

命令:show variables like '%partition%' 運(yùn)行結(jié)果:

mysql> show variables like'%partition%';+-------------------+-------+| Variable_name |Value|+-------------------+-------+|have_partitioning| YES |+-------------------+-------+1rowinset (0.00sec)

have_partintioning 的值為YES,表示支持分區(qū)。

十五、MySQL支持的分區(qū)類型有哪些?

1、RANGE分區(qū):這種模式允許將數(shù)據(jù)劃分不同范圍。例如可以將一個(gè)表通過(guò)年份劃分成若干個(gè)分區(qū)

2、LIST分區(qū):這種模式允許系統(tǒng)通過(guò)預(yù)定義的列表的值來(lái)對(duì)數(shù)據(jù)進(jìn)行分割。按照List中的值分區(qū),與RANGE的區(qū)別是,range分區(qū)的區(qū)間范圍值是連續(xù)的。

3、HASH分區(qū) :這中模式允許通過(guò)對(duì)表的一個(gè)或多個(gè)列的Hash Key進(jìn)行計(jì)算,最后通過(guò)這個(gè)Hash碼不同數(shù)值對(duì)應(yīng)的數(shù)據(jù)區(qū)域進(jìn)行分區(qū)。例如可以建立一個(gè)對(duì)表主鍵進(jìn)行分區(qū)的表。

4、KEY分區(qū) :上面Hash模式的一種延伸,這里的Hash Key是MySQL系統(tǒng)產(chǎn)生的。

十六、四種隔離級(jí)別

1、Serializable (串行化):可避免臟讀、不可重復(fù)讀、幻讀的發(fā)生。

2、Repeatable read (可重復(fù)讀):可避免臟讀、不可重復(fù)讀的發(fā)生。

3、Read committed (讀已提交):可避免臟讀的發(fā)生。

4、Read uncommitted (讀未提交):最低級(jí)別,任何情況都無(wú)法保證。。

十七、關(guān)于MVVC

MySQL InnoDB存儲(chǔ)引擎,實(shí)現(xiàn)的是基于多版本的并發(fā)控制協(xié)議——MVCC (Multi-Version Concurrency Control) (注:與MVCC相對(duì)的,是基于鎖的并發(fā)控制,Lock-Based Concurrency Control)。MVCC最大的好處:讀不加鎖,讀寫不沖突。在讀多寫少的OLTP應(yīng)用中,讀寫不沖突是非常重要的,極大的增加了系統(tǒng)的并發(fā)性能,現(xiàn)階段幾乎所有的RDBMS,都支持了MVCC。

1、LBCC:Lock-Based Concurrency Control,基于鎖的并發(fā)控制。

2、MVCC:Multi-Version Concurrency Control,基于多版本的并發(fā)控制協(xié)議。純粹基于鎖的并發(fā)機(jī)制并發(fā)量低,MVCC是在基于鎖的并發(fā)控制上的改進(jìn),主要是在讀操作上提高了并發(fā)量。

十八、在MVCC并發(fā)控制中,讀操作可以分成兩類

1、快照讀 (snapshot read):讀取的是記錄的可見版本 (有可能是歷史版本),不用加鎖(共享讀鎖s鎖也不加,所以不會(huì)阻塞其他事務(wù)的寫)。

2、當(dāng)前讀 (current read):讀取的是記錄的最新版本,并且,當(dāng)前讀返回的記錄,都會(huì)加上鎖,保證其他事務(wù)不會(huì)再并發(fā)修改這條記錄。

十九、行級(jí)鎖定的優(yōu)點(diǎn)

1、當(dāng)在許多線程中訪問不同的行時(shí)只存在少量鎖定沖突。

2、回滾時(shí)只有少量的更改

3、可以長(zhǎng)時(shí)間鎖定單一的行。

二十、行級(jí)鎖定的缺點(diǎn)

1、比頁(yè)級(jí)或表級(jí)鎖定占用更多的內(nèi)存。

2、當(dāng)在表的大部分中使用時(shí),比頁(yè)級(jí)或表級(jí)鎖定速度慢,因?yàn)槟惚仨毇@取更多的鎖。

3、如果你在大部分?jǐn)?shù)據(jù)上經(jīng)常進(jìn)行GROUP BY操作或者必須經(jīng)常掃描整個(gè)表,比其它鎖定明顯慢很多。

4、用高級(jí)別鎖定,通過(guò)支持不同的類型鎖定,你也可以很容易地調(diào)節(jié)應(yīng)用程序,因?yàn)槠滏i成本小于行級(jí)鎖定。

二十一、MySQL優(yōu)化

1、開啟查詢緩存,優(yōu)化查詢

2、explain你的select查詢,這可以幫你分析你的查詢語(yǔ)句或是表結(jié)構(gòu)的性能瓶頸。EXPLAIN 的查詢結(jié)果還會(huì)告訴你你的索引主鍵被如何利用的,你的數(shù)據(jù)表是如何被搜索和排序的

3、當(dāng)只要一行數(shù)據(jù)時(shí)使用limit 1,MySQL數(shù)據(jù)庫(kù)引擎會(huì)在找到一條數(shù)據(jù)后停止搜索,而不是繼續(xù)往后查少下一條符合記錄的數(shù)據(jù)

4、為搜索字段建索引

5、使用 ENUM 而不是 VARCHAR,如果你有一個(gè)字段,比如“性別”,“國(guó)家”,“民族”,“狀態(tài)”或“部門”,你知道這些字段的取值是有限而且固定的,那么,你應(yīng)該使用 ENUM 而不是VARCHAR。

6、Prepared StatementsPreparedStatements很像存儲(chǔ)過(guò)程,是一種運(yùn)行在后臺(tái)的SQL語(yǔ)句集合,我們可以從使用 prepared statements 獲得很多好處,無(wú)論是性能問題還是安全問題。Prepared Statements 可以檢查一些你綁定好的變量,這樣可以保護(hù)你的程序不會(huì)受到“SQL注入式”攻擊

7、垂直分表

8、選擇正確的存儲(chǔ)引擎

二十二、key和index的區(qū)別

1、key 是數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),它包含兩層意義和作用,一是約束(偏重于約束和規(guī)范數(shù)據(jù)庫(kù)的結(jié)構(gòu)完整性),二是索引(輔助查詢用的)。包括primary key, unique key, foreign key 等

2、index是數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),它只是輔助查詢的,它創(chuàng)建時(shí)會(huì)在另外的表空間(mysql中的innodb表空間)以一個(gè)類似目錄的結(jié)構(gòu)存儲(chǔ)。索引要分類的話,分為前綴索引、全文本索引等;

二十三、Mysql 中 MyISAM 和 InnoDB 的區(qū)別有哪些?

區(qū)別:

1、InnoDB支持事務(wù),MyISAM不支持,對(duì)于InnoDB每一條SQL語(yǔ)言都默認(rèn)封裝成事務(wù),自動(dòng)提交,這樣會(huì)影響速度,所以最好把多條SQL語(yǔ)言放在begin和commit之間,組成一個(gè)事務(wù);

2、InnoDB支持外鍵,而MyISAM不支持。對(duì)一個(gè)包含外鍵的InnoDB表轉(zhuǎn)為MYISAM會(huì)失??;

3、InnoDB是聚集索引,數(shù)據(jù)文件是和索引綁在一起的,必須要有主鍵,通過(guò)主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過(guò)主鍵查詢到數(shù)據(jù)。因此,主鍵不應(yīng)該過(guò)大,因?yàn)橹麈I太大,其他索引也都會(huì)很大。而MyISAM是非聚集索引,數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨(dú)立的。

4、InnoDB不保存表的具體行數(shù),執(zhí)行select count(*) from table時(shí)需要全表掃描。而MyISAM用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語(yǔ)句時(shí)只需要讀出該變量即可,速度很快;

5、Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;

如何選擇:

1、是否要支持事務(wù),如果要請(qǐng)選擇innodb,如果不需要可以考慮MyISAM;

2、如果表中絕大多數(shù)都只是讀查詢,可以考慮MyISAM,如果既有讀寫也挺頻繁,請(qǐng)使用InnoDB。

3、系統(tǒng)奔潰后,MyISAM恢復(fù)起來(lái)更困難,能否接受;

4、MySQL5.5版本開始Innodb已經(jīng)成為Mysql的默認(rèn)引擎(之前是MyISAM),說(shuō)明其優(yōu)勢(shì)是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會(huì)差。

二十四、數(shù)據(jù)庫(kù)表創(chuàng)建注意事項(xiàng)

1、字段名及字段配制合理性

剔除關(guān)系不密切的字段;

字段命名要有規(guī)則及相對(duì)應(yīng)的含義(不要一部分英文,一部分拼音,還有類似a.b.c這樣不明含義的字段);

字段命名盡量不要使用縮寫(大多數(shù)縮寫都不能明確字段含義);

字段不要大小寫混用(想要具有可讀性,多個(gè)英文單詞可使用下劃線形式連接);

字段名不要使用保留字或者關(guān)鍵字;

保持字段名和類型的一致性;

慎重選擇數(shù)字類型;

給文本字段留足余量;

2、系統(tǒng)特殊字段處理及建成后建議

添加刪除標(biāo)記(例如操作人、刪除時(shí)間);

建立版本機(jī)制;

3、表結(jié)構(gòu)合理性配置

多型字段的處理,就是表中是否存在字段能夠分解成更小獨(dú)立的幾部分(例如:人可以分為男人和女人);

多值字段的處理,可以將表分為三張表,這樣使得檢索和排序更加有調(diào)理,且保證數(shù)據(jù)的完整性!

4、其它建議

對(duì)于大數(shù)據(jù)字段,獨(dú)立表進(jìn)行存儲(chǔ),以便影響性能(例如:簡(jiǎn)介字段);

使用varchar類型代替char,因?yàn)関archar會(huì)動(dòng)態(tài)分配長(zhǎng)度,char指定長(zhǎng)度是固定的;

給表創(chuàng)建主鍵,對(duì)于沒有主鍵的表,在查詢和索引定義上有一定的影響;

避免表字段運(yùn)行為null,建議設(shè)置默認(rèn)值(例如:int類型設(shè)置默認(rèn)值為0)在索引查詢上,效率立顯;

建立索引,最好建立在唯一和非空的字段上,建立太多的索引對(duì)后期插入、更新都存在一定的影響(考慮實(shí)際情況來(lái)創(chuàng)建);

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6684

    瀏覽量

    123140
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3752

    瀏覽量

    64229
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    797

    瀏覽量

    26399

原文標(biāo)題:面試中有哪些經(jīng)典的數(shù)據(jù)庫(kù)問題?

文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MySQL數(shù)據(jù)庫(kù)索引的底層是怎么實(shí)現(xiàn)的

    更低,3次磁盤IO即可。好的數(shù)據(jù)結(jié)構(gòu),應(yīng)該是能盡量減少磁盤IO的次數(shù)。既然BB+的一個(gè)節(jié)點(diǎn)可以存儲(chǔ)多個(gè)節(jié)點(diǎn)。這個(gè)存儲(chǔ)的節(jié)點(diǎn)數(shù)量是看節(jié)點(diǎn)
    發(fā)表于 07-28 15:30

    時(shí)空數(shù)據(jù)庫(kù)索引研究

    時(shí)空數(shù)據(jù)庫(kù)為了快速訪問其龐大的數(shù)據(jù)量,必須建立有效的時(shí)空索引以提高各類時(shí)空查詢效率。本文提出了一種基于3D R-tree 算法的時(shí)空索引方法:3D R*-tree。3D R*-tree
    發(fā)表于 09-17 11:14 ?9次下載

    數(shù)據(jù)庫(kù)索引技術(shù)應(yīng)用

    在對(duì)數(shù)據(jù)庫(kù)索引技術(shù)進(jìn)行討論和研究,論述如何準(zhǔn)確有效的設(shè)置數(shù)據(jù)庫(kù)索引,并結(jié)合具體的實(shí)例對(duì)數(shù)據(jù)庫(kù)索引
    發(fā)表于 11-04 11:28 ?26次下載

    基于B+的動(dòng)態(tài)數(shù)據(jù)持有性證明方案

    針對(duì)云存儲(chǔ)環(huán)境下的數(shù)據(jù)持有性證明( PDP)方案效率較低、不能很好支持全動(dòng)態(tài)更新的問題,設(shè)計(jì)了一種基于B+的動(dòng)態(tài)數(shù)據(jù)持有性證明方案。該方案引入雙線性對(duì)技術(shù)
    發(fā)表于 11-30 17:14 ?0次下載
    基于<b class='flag-5'>B+</b><b class='flag-5'>樹</b>的動(dòng)態(tài)<b class='flag-5'>數(shù)據(jù)</b>持有性證明方案

    基于圖形數(shù)據(jù)庫(kù)構(gòu)建可持久化索引的方法

    可搜索加密技術(shù)提供了對(duì)加密文件的關(guān)鍵詞搜索能力,但是無(wú)法有效對(duì)云環(huán)境中海量文件形成的巨大索引進(jìn)行操作。在樹形索引的基礎(chǔ)上,提出基于圖形
    發(fā)表于 12-04 16:00 ?0次下載
    基于圖形<b class='flag-5'>數(shù)據(jù)庫(kù)</b>構(gòu)建可持久化<b class='flag-5'>索引</b>的方法

    基于KD和R的多維索引結(jié)構(gòu)

    針對(duì)云存儲(chǔ)系統(tǒng)大多基于鍵值對(duì) key,value模型存儲(chǔ)數(shù)據(jù),多維查詢需要對(duì)整個(gè)數(shù)據(jù)集進(jìn)行完全掃描,查詢效率較低的問題,提出了一種基于KD和R
    發(fā)表于 01-25 15:13 ?0次下載
    基于KD<b class='flag-5'>樹</b>和R<b class='flag-5'>樹</b>的多維<b class='flag-5'>索引</b>結(jié)構(gòu)

    如何在Oracle數(shù)據(jù)庫(kù)找出損壞索引?

    在Oracle數(shù)據(jù)庫(kù)如何找出損壞索引呢?下面我們?nèi)藶闃?gòu)造一個(gè)案例,將索引塊損壞。
    的頭像 發(fā)表于 10-18 14:24 ?3494次閱讀

    solr管理后臺(tái)操作維護(hù)索引庫(kù)

    查詢索引庫(kù)的內(nèi)容在我們的Query的模塊當(dāng)中,什么都不操作直接點(diǎn)擊Eexcute Query默認(rèn)查詢10條數(shù)據(jù),前提是之前有導(dǎo)入
    發(fā)表于 06-03 16:17 ?1135次閱讀
    solr管理后臺(tái)<b class='flag-5'>操作</b>維護(hù)<b class='flag-5'>索引</b><b class='flag-5'>庫(kù)</b>

    數(shù)據(jù)庫(kù)索引使用策略及優(yōu)化

    的內(nèi)容完全基于上文的理論基礎(chǔ),實(shí)際上一旦理解了索引背后的機(jī)制,那么選擇高性能的策略就變成了純粹的推理,并且可以理解這些策略背后的邏輯。 示例數(shù)據(jù)庫(kù) 為了討論索引策略,需要一個(gè)
    的頭像 發(fā)表于 11-02 15:13 ?1675次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>索引</b>使用策略及優(yōu)化

    對(duì) B+ 索引在 MySQL 的認(rèn)識(shí)

    概述 本質(zhì):數(shù)據(jù)庫(kù)維護(hù)某種數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù) 索引取舍原則:索引的結(jié)構(gòu)組織要盡量減少查找過(guò)程
    的頭像 發(fā)表于 11-08 11:11 ?1242次閱讀
    對(duì) <b class='flag-5'>B+</b> <b class='flag-5'>樹</b>與<b class='flag-5'>索引</b>在 MySQL <b class='flag-5'>中</b>的認(rèn)識(shí)

    面向關(guān)系數(shù)據(jù)庫(kù)的智能索引調(diào)優(yōu)方法

    保持數(shù)據(jù)庫(kù)高效的查詢性能.現(xiàn)有的方法大多利用了數(shù)據(jù)庫(kù)實(shí)例的查詢?nèi)罩?它們先從查詢?nèi)罩?b class='flag-5'>中得到候選索引,再利用人工設(shè)計(jì)的模型選擇索引,從而調(diào)節(jié)
    的頭像 發(fā)表于 02-21 17:31 ?1290次閱讀
    面向關(guān)系<b class='flag-5'>數(shù)據(jù)庫(kù)</b>的智能<b class='flag-5'>索引</b>調(diào)優(yōu)方法

    MySQL為什么選擇B+作為索引結(jié)構(gòu)?

    在MySQL,無(wú)論是Innodb還是MyIsam,都使用了B+索引結(jié)構(gòu)(這里不考慮hash等其他索引)。本文將從最普通的二叉查找
    的頭像 發(fā)表于 07-20 11:28 ?901次閱讀
    MySQL為什么選擇<b class='flag-5'>B+</b><b class='flag-5'>樹</b>作為<b class='flag-5'>索引</b>結(jié)構(gòu)?

    MySQL索引的常用知識(shí)點(diǎn)

    索引結(jié)構(gòu):B+ 索引其實(shí)是一種數(shù)據(jù)結(jié)構(gòu) 注意B+
    的頭像 發(fā)表于 09-30 16:43 ?424次閱讀

    索引是什么意思 優(yōu)缺點(diǎn)有哪些

    數(shù)據(jù)結(jié)構(gòu),以協(xié)助快速查詢、更新數(shù)據(jù)庫(kù)數(shù)據(jù)。索引的實(shí)現(xiàn)通常使用B
    的頭像 發(fā)表于 10-09 10:19 ?2746次閱讀

    索引的底層實(shí)現(xiàn)詳解

    存儲(chǔ)在索引,同時(shí)在索引表中保存指向每個(gè)數(shù)據(jù)行的指針。 B-Tree索引(MySQL使用
    的頭像 發(fā)表于 10-09 10:26 ?711次閱讀
    <b class='flag-5'>索引</b>的底層實(shí)現(xiàn)詳解