国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

關(guān)于數(shù)據(jù)庫索引的探討

2013-08-15 00:44:35陜西財經(jīng)職業(yè)技術(shù)學院信息工程系楊軍莉
電子世界 2013年6期
關(guān)鍵詞:新華字典鏈表數(shù)據(jù)表

陜西財經(jīng)職業(yè)技術(shù)學院信息工程系 楊軍莉

由于計算機網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,企業(yè)間數(shù)據(jù)交流的各種數(shù)據(jù)量的急劇增長,不但要求處理的結(jié)果要準確,而且也要求處理速度及時,這對數(shù)據(jù)庫的處理能力能力方面提出了更高的要求,如何設(shè)置有效的數(shù)據(jù)庫索引達到數(shù)據(jù)庫優(yōu)化是本文要討論的重點。

應(yīng)用索引的過程其實類似于查新華字典,比照數(shù)據(jù)庫的概念,新華字典里的拼音檢字法和部首檢字法就是新華字典的兩種不同的索引,而新華字典的正文則相當于表同時創(chuàng)建索引并不會改變表中的數(shù)據(jù)的物理位置,它只是創(chuàng)建了一個新的數(shù)據(jù)結(jié)構(gòu)指向數(shù)據(jù)表。比起逐一查閱字典正文查找某一個具體的漢字,顯然不管使用哪種檢字法都可以很快地在字典正文中找到這個漢字,這就是使用索引的給我們帶來的好處。如何準確高效地從海量的信息中查詢到想要的數(shù)據(jù),已成為數(shù)據(jù)庫設(shè)計人員的首要任務(wù)。

所以我們可以從邏輯上簡單地認為,索引是一個單獨的、物理的數(shù)據(jù)結(jié)構(gòu),它主要包含兩列內(nèi)容,第一列是從表或視圖中的列或列的組合所生成的鍵值的集合,且根據(jù)鍵值以升序或降序排列。這一列類似于新華字典的音序,它以字母升序排列,即A在最前,而Z在最后。索引的另外一列則是指向表中這些值的數(shù)據(jù)頁的邏輯指針的集合。這一列則類似于對應(yīng)音序的頁碼。索引依賴于表,作為表的組成部分,由數(shù)據(jù)庫系統(tǒng)自動維護,是對數(shù)據(jù)庫表中一個或多個列的值進行排序的數(shù)據(jù)結(jié)構(gòu),不同的索引對應(yīng)不同的排序方法。一個表的存儲是由兩部分組成的,一部分是用來存放數(shù)據(jù)的數(shù)據(jù)頁面,另一部分是用來存放索引的索引索引頁面,通常索引頁面比數(shù)據(jù)頁面小得多。

假設(shè)表中的數(shù)據(jù)在磁盤上存儲是有序的,那么當在數(shù)據(jù)庫在進行插入數(shù)據(jù)、刪除數(shù)據(jù)和更新數(shù)據(jù)時,則一定會導致數(shù)據(jù)的順序會發(fā)生變化,為了保證數(shù)據(jù)的連續(xù)性和有序性,就需要重新移動數(shù)據(jù),改變它們的物理位置,而種移動將會導致增大磁盤的I/O操作,使得整個數(shù)據(jù)庫運行非常緩慢;使用索引的主要目的是使數(shù)據(jù)邏輯有序。為了實現(xiàn)數(shù)據(jù)邏輯有序,實際上索引的物理結(jié)構(gòu)是一個雙向鏈表,使用雙向鏈表來保證數(shù)據(jù)的邏輯順序,如果要對表中的一個已有結(jié)點進行更新則僅需修改該節(jié)點的前驅(qū)和后繼,而且無需修改該節(jié)點的物理位置;如果要在兩個節(jié)點中插入一個新的節(jié)點只需修改節(jié)點的前驅(qū)和后繼,而且無需修改新節(jié)點的物理位置;如果要刪除一個已有結(jié)點,則僅需修改其前驅(qū)結(jié)點的后繼為該被刪除結(jié)點的后繼??偟膩碚f,索引保存著具體數(shù)據(jù)的物理地址值。

索引從大的方面分為聚集索引和非聚集索引。所謂聚集索引是指表中數(shù)據(jù)的物理順序是和索引的順序是一至的,數(shù)據(jù)頁是聚集索引的葉節(jié)點,數(shù)據(jù)頁之間通過雙向鏈表的形式連接起來,而且實際的數(shù)據(jù)都存儲在數(shù)據(jù)頁中。查詢時,數(shù)據(jù)庫首先根據(jù)索引查找,找到索引值后,接著查找該索引的數(shù)據(jù)頁(葉節(jié)點)獲取具體數(shù)據(jù)。如果沒有索引,則查詢時會進行全表的遍歷。第二類索引則稱為非聚集索引,非聚集索引是物理存儲不按照索引排序,非聚集索引的葉節(jié)點(IndexLeafPages)包含著指向具體數(shù)據(jù)行的指針或聚集索引,數(shù)據(jù)頁之間沒有連接是相對獨立的頁。具體地來說,非聚集索引又分為:①堆表非聚集索引在沒有聚集索引的情況下,表中的數(shù)據(jù)頁是通過堆(Heap)形式進行存儲,堆是不含聚集索引的表;SQLServer中的堆存儲是把新的數(shù)據(jù)行存儲到最后一個頁中。非聚集索引通過雙向鏈表連接,而葉節(jié)點包含指具體數(shù)據(jù)行的指針。堆表中查詢信息時,首先遍歷索引,獲取到指針信息,再根據(jù)指針信息獲取相應(yīng)數(shù)據(jù)頁中的數(shù)據(jù)。②聚集表非聚集索引當表上存在聚集索引時,任何非聚集索引的葉節(jié)點就不是指針值,而是包含聚集索引的索引值。非聚集索引依然通過雙向鏈表連接,但葉節(jié)點包含的是索引表的索引值。在聚集表中查詢信息時,首先遍歷索引,獲取索引值,然后根據(jù)索引值獲取相應(yīng)數(shù)據(jù)頁中的數(shù)據(jù)。

數(shù)據(jù)庫查詢表主要通過以下五種方式:

①TableScan:掃描整個表,這個操作將會逐行檢查整個表,直到找到所匹配的記錄行或者掃描完整個表??梢钥闯觯@種查找記錄的方式效率是最差的。

②IndexScan:根據(jù)索引,按照一定的算法從表中過濾出來一部分記錄,在過濾出來的這一部分記錄中進行查找所匹配的記錄行,顯然這種方式比第一種方式的查找范圍要小,因此比TableScan的查找效率高。

③IndexSeek:根據(jù)索引,直接定位(獲取)記錄的存放位置,然后根據(jù)獲取的記錄的存放位置,直接取得記錄,因此,比TableScan、IndexScan快。

④ClusteredIndexScan:與TableScan相似,這種方式也是要遍歷整個表,但是它與TableScan不同的是數(shù)據(jù)表中的記錄已經(jīng)按照聚集索引來排列了,即記錄實際就是按聚集索引的來順序存放的。而TableScan掃描的表只是沒有建立聚集索引,表中的記錄沒有按照一定的順序存放,因此這兩個操作本質(zhì)上是一樣的。

⑤ClusteredIndexSeek:這種方式是直接根據(jù)聚集索引獲取記錄,因為表中的記錄已經(jīng)按照聚集索引排列了,所以是最快的查詢方法。

一個表是不是索引越多越好呢,當然不是。因為增加索引后,會增加維護該索引的時空開銷,修改數(shù)據(jù)表時,必須要更新相應(yīng)字段的索引。當一個表中的索引過多時,也嚴重會影響性能。一般會考慮在經(jīng)常查詢的列上建立相關(guān)索引并及時刪除不需要的索引。

總之,索引使數(shù)據(jù)庫引的查詢操作執(zhí)行的速度更快,它可以有針對性的數(shù)據(jù)檢索,而不是簡單地整個表掃描(FullTableScan)。在數(shù)據(jù)庫中,為表添加必要的索引會提高查詢的執(zhí)行效率,但是過多的索引必然需要更新和維護索引表,這將會導致系統(tǒng)性能下降,所以必須控制索引的數(shù)量及時刪除不必要的索引。

[1]曹素麗,楊延廣.ORACLE數(shù)據(jù)庫索引的設(shè)計與維護研究[J].微型電腦應(yīng)用,2012(11):29-31.

[2]馬守東.關(guān)系數(shù)據(jù)庫索引的研究和探索[J].信息與電腦(理論版),2011(10):159-160.

[3]張效尉,姜靜.內(nèi)存數(shù)據(jù)庫技術(shù)研究[J].軟件導刊,2011(10):147-148

[4]涂剛,劉華清,傅偉.數(shù)據(jù)表結(jié)構(gòu)的研究[J].天水師范學院學報,2009(5):86-88.

[5]岳國華.提高ORACLE8i數(shù)據(jù)庫響應(yīng)速度的若干技術(shù)對策[J].計算機應(yīng)用與軟件,2004(5):110-112.

猜你喜歡
新華字典鏈表數(shù)據(jù)表
新華字典
漢語世界(2021年5期)2021-11-24 01:25:40
湖北省新冠肺炎疫情數(shù)據(jù)表
黨員生活(2020年2期)2020-04-17 09:56:30
基于二進制鏈表的粗糙集屬性約簡
跟麥咭學編程
基于列控工程數(shù)據(jù)表建立線路拓撲關(guān)系的研究
基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗證機制
《新華字典》獲兩項吉尼斯世界紀錄
新版《新華字典》將收入網(wǎng)絡(luò)用語
《新華字典》背后那些事兒
華人時刊(2016年19期)2016-04-05 07:56:09
圖表
界首市| 灌南县| 博爱县| 泗阳县| 太仆寺旗| 工布江达县| 囊谦县| 定襄县| 湖口县| 梁平县| 九龙城区| 靖江市| 临湘市| 云南省| 库尔勒市| 军事| 房山区| 新宾| 罗平县| 黄平县| 上思县| 宁阳县| 偏关县| 元阳县| 宁德市| 边坝县| 兴文县| 定兴县| 田阳县| 乌海市| 渑池县| 桃园县| 双鸭山市| 柞水县| 观塘区| 陈巴尔虎旗| 黄冈市| 茶陵县| 怀宁县| 通榆县| 萝北县|