亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        淺談數(shù)據(jù)庫索引的使用

        2008-01-01 00:00:00
        中國校外教育(下旬) 2008年2期

        [摘要]索引是影響關(guān)系數(shù)據(jù)庫(RDBMS)性能的重要因素之一。當今常用的關(guān)系數(shù)據(jù)庫,如SQL Server、Sybase、Oracle、DB2、informix等,為了提高性能,都提供相應的索引機制。本文介紹了索引的概念、使用方法以及日常維護。

        [關(guān)鍵詞]數(shù)據(jù)庫 索引 檢索

        一、索引的概念

        1.索引基本概念

        索引是一個單獨的、物理的數(shù)據(jù)庫結(jié)構(gòu),它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數(shù)據(jù)頁的邏輯指針清單。表的存儲由兩部分組成,一部分用來存放數(shù)據(jù)頁面,另一部分存放索引頁面。通常,索引頁面相對于數(shù)據(jù)頁面來說小得多。數(shù)據(jù)檢索花費的大部分開銷是磁盤讀寫,沒有索引就需要從磁盤上讀表的每一個數(shù)據(jù)頁,如果有索引,則只需查找索引頁面就可以了。所以建立合理的索引,就能加速數(shù)據(jù)的檢索過程。

        2.索引分類

        根據(jù)索引的順序與數(shù)據(jù)表的物理順序是否相同可以分為:聚簇索引(clustered index)和非聚簇索引(nonclustered index)。

        (1)聚簇索引重新組織表中的數(shù)據(jù)以按指定的一個或多個列的值排序。聚簇索引的葉節(jié)點包含實際的數(shù)據(jù),因此用它查找數(shù)據(jù)很快,但每個表只能建一個聚簇索引。

        (2)非聚簇索引不重新組織表中的數(shù)據(jù),它的葉節(jié)點中存儲了組成非聚簇索引的列的值和行定位指針。

        下面,我們舉例來說明一下聚集索引和非聚集索引的區(qū)別:

        漢語字典的正文本身就是一個聚簇索引。比如,我們要查“安”字,就會很自然地翻開字典的前幾頁,因為“安”的拼音是“an”,而按照拼音排序漢字的字典是以英文字母“a”開頭并以“z”結(jié)尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”開頭的部分仍然找不到這個字,那么就說明您的字典中沒有這個字;也就是說,字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內(nèi)容。

        我們把這種正文內(nèi)容本身就是一種按照一定規(guī)則排列的目錄稱為“聚簇索引”。

        如果您認識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認識的字,不知道它的發(fā)音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據(jù)“偏旁部首”查到您要找的字,然后根據(jù)這個字后的頁碼直接翻到某頁來找到您要找的字。但您結(jié)合“部首目錄”和“檢字表”而查到的字的排序并不是真正的正文的排序方法。

        我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為“非聚簇索引”。通過以上例子,我們可以理解到什么是“聚簇索引”和“非聚簇索引”。

        二、索引的使用

        1.聚簇索引的使用

        在聚簇索引下,數(shù)據(jù)在物理上按順序排在數(shù)據(jù)頁上,重復值也排在一起,因而在那些包含范圍檢查(between、<、<=、>、>=)或使用group by、order by的查詢時,一旦找到具有范圍中第一個鍵值的行,具有后續(xù)索引值的行必然連在一起,不必進一步搜索,避免了大范圍掃描,可以大大提高查詢速度。

        2.非聚簇索引的使用

        非聚簇索引的葉節(jié)點不包含實際的數(shù)據(jù),因此它檢索效率較低,一個表只能建一個聚簇索引,當用戶需要建立多個索引時就需要使用非聚簇索引了。在建立非聚簇索引時,要權(quán)衡索引對查詢速度的加快與降低修改速度之間的利弊。

        3.索引使用的誤區(qū)

        (1)主鍵就是聚簇索引

        一些數(shù)據(jù)庫系統(tǒng)(比如SQL server)會把主鍵默認為聚簇索引,這種做法常常造成聚簇索引的浪費。通常,我們會為每個表建立一個ID列,以區(qū)分每條數(shù)據(jù),并且該列是自動增大的,步長一般為1。如果我們把這個列設(shè)為聚簇索引。這樣做可以使數(shù)據(jù)在數(shù)據(jù)庫中按ID進行物理排序,但這種做法在實際應用中意義并不大。

        舉例如下:以電信級數(shù)據(jù)庫中存儲話單的表為例,我們查詢某個用戶的通話記錄時經(jīng)常需要返回某個時間特定范圍內(nèi)的數(shù)據(jù)。下面我們分幾種情況觀察在不同索引條件下查詢相同內(nèi)容所用的時間。

        假設(shè)話單表名為“rec”,其中主叫號碼字段名為“callingnumber”,日期字段名為“date”,要求是從表rec中檢索callingnumber為“037112345678”的主叫號碼2007年3月1日到20日的通話記錄,對應的SQL語句如下:

        Select * from rec where date>='20070301' and date<='20070320'and callingnumber='037112345678';

        第一種情況,用ID列建立聚簇索引,不為date和callingnumber建立索引,查詢時間為287秒。(相當于整表掃描,此種情況下數(shù)據(jù)庫的效率是極低的)

        第二種情況,用ID列建立聚簇索引,為date和callingnumber(date在前)兩列建立非聚簇索引,查詢時間為83秒。

        第三種情況,用date和callingnumber(date在前)列建立聚簇索引,用建立非聚簇索引查詢時間為2秒。

        由以上分析可以看出聚簇索引是非常寶貴的,應該為經(jīng)常用于檢索某個范圍內(nèi)數(shù)據(jù)的列或group by、order by等子句的列建立聚簇索引,這樣能夠極大的提高系統(tǒng)性能。

        (2)重視以多個列創(chuàng)建的索引中列的順序問題

        一些用戶認為只要合理的選擇列建立索引,不必關(guān)心列的順序就可以提高檢索速度,這種觀點是錯誤的。多列索引中列的先后順序應該和實際應用中where、group by或order by等子句里列的放置位置相同。參考上面舉的例子,第三種情況下,如果把callingnumber放在date前面,執(zhí)行上述SQL語句就不會用到這兩個索引,檢索的時間也會變得很長。

        (3)只要建立索引就能顯著提高查詢速度

        事實上,我們可以發(fā)現(xiàn)上面的例子中,第二、三中情況下建立索引的字段完全相同;不同的僅是前者在date、callingnumber字段上建立的是非聚簇索引,后者在此字段上建立的是聚簇索引,但查詢速度卻有著天壤之別。所以,并非是在任何字段上簡單地建立索引就能提高查詢速度。

        三、索引的維護

        數(shù)據(jù)庫系統(tǒng)運行一段時間后,隨著數(shù)據(jù)行的插入、刪除和數(shù)據(jù)頁的分裂,索引對系統(tǒng)的優(yōu)化性能就會大大降低。這時候,我們需要對索引進行統(tǒng)計更新。

        下面以informix數(shù)據(jù)庫為例,對統(tǒng)計更新的概念進行闡述:

        為了提高數(shù)據(jù)庫的效率,INFORMIX提供了一個基于成本的查詢優(yōu)化器,執(zhí)行update statistics語句(即統(tǒng)計更新語句)的作用就是將您創(chuàng)建的數(shù)據(jù)庫表的有關(guān)統(tǒng)計信息更新到系統(tǒng)sysmaster的相關(guān)表中(如systables、syscolumns、sysindexes、sysdistrib、sysprocplan等),以便查詢優(yōu)化器選擇最佳的執(zhí)行路徑。

        四、總結(jié)

        索引有助于提高檢索性能,但過多或不當?shù)乃饕矔е孪到y(tǒng)低效。因為用戶在表中每加進一個索引,數(shù)據(jù)庫就要做更多的工作。過多的索引甚至會導致索引碎片。

        所以說,我們要建立一個“適當”的索引體系,特別是對聚合索引的創(chuàng)建,更應精益求精,以使您的數(shù)據(jù)庫能得到高性能的發(fā)揮。

        (作者單位:河南鄭州旅游職業(yè)學院)

        蜜臀色欲av在线播放国产日韩| 亚洲av成熟国产精品一区二区| 少妇被黑人嗷嗷大叫视频| 精品一区二区三区牛牛| 国产自拍精品一区在线观看| 国产精成人品日日拍夜夜免费| 亚洲色欲久久久久综合网 | 久久精品99久久香蕉国产| 欧美z0zo人禽交欧美人禽交| 久久久久亚洲av成人网址| 国产美女被遭强高潮露开双腿| 日本av一区二区在线| 91丝袜美腿亚洲一区二区| 国产色无码精品视频国产 | 欧美亚洲国产精品久久久久| 高清国产精品一区二区| 亚洲av无码精品无码麻豆| 国产av人人夜夜澡人人爽麻豆| jizz国产精品免费麻豆| 男女上床视频在线观看| 国产亚洲精品视频一区二区三区| 无码成人一区二区| 精品视频入口| 97超碰中文字幕久久| 久久久精品午夜免费不卡| 亚洲va中文字幕无码久久不卡| 国产成人亚洲综合小说区| 国内自拍视频一区二区三区| 午夜理论片yy44880影院| 一区二区日韩国产精品| 一区二区免费国产a在亚洲| 国内嫩模自拍偷拍视频| 成 人 免费 在线电影| 手机在线精品视频| 国产一区二区三区亚洲精品| 亚洲天堂av在线网站| 亚洲男人av天堂午夜在| 在线观看国产内射视频| 亚洲精品女优中文字幕| 亚洲丝袜美腿在线视频| 激情第一区仑乱|