Ⅰ 索引需要佔用物理內存
佔用的
經常看見有人問,MSSQL 佔用了太多的內存,而且還不斷的增長;或者說已經
最大的開銷一般是用於數據緩存,如果內存足夠,它會把用過的數據和覺得
你會用到的數據統統扔到內存中,直到內存不足的時候,才把命中率低的數據給
清掉。所以一般我們在看statistics io 的時候,看到的physics read 都是0。
其次就是查詢的開銷,一般地說,hash join 是會帶來比較大的內存開銷的,
而merge join 和nested loop 的開銷比較小,還有排序和中間表、游標也是會
有比較大的開銷的。
所以用於關聯和排序的列上一般需要有索引。
再其次就是對執行計劃、系統數據的存儲,這些都是比較小的。
我們先來看數據緩存對性能的影響,如果系統中沒有其它應用程序來爭奪內
存,數據緩存一般是越多越好,甚至有些時候我們會強行把一些數據pin 在高速
緩存中。但是如果有其它應用程序,雖然在需要的時候MSSQL 會釋放內存,但是
線程切換、IO 等待這些工作也是需要時間的,所以就會造成性能的降低。這樣
我們就必須設置MSSQL 的最大內存使用。可以在SQL Server 屬性(內存選項卡)
中找到配置最大使用內存的地方,或者也可以使用sp_configure 來完成。如果
沒有其它應用程序,那麼就不要限制MSSQL 對內存的使用。
然後來看查詢的開銷,這個開銷顯然是越低越好,因為我們不能從中得到好
處,相反,使用了越多的內存多半意味著查詢速度的降低。所以我們一般要避免
中間表和游標的使用,在經常作關聯和排序的列上建立索引。
Ⅱ Oracle資料庫索引有什麼背景、現狀和意義
索引分為好多種類型,它的存在意義就是快速定位數據位置,因為一張很大的表百萬條及以上的數據量才有必要建索引,首先你要先弄懂索引的基本結構是什麼,是怎麼工作的;它的結構就是一條數據對應一個rowid,通過rowid信息直接訪問相關數據塊里的數據,這就大大減小了磁碟掃描的操作時間,因為大量從磁碟讀取數據然後再篩選符合條件的數據需要很長的時間,也影響了其他資料庫操作效率(搶占不必要的cpu和內存資源);就是說從一張大表裡只查詢一條或者是幾條數據是最有必要創建索引的,否則意義不大
Ⅲ 資料庫索引的作用
為什麼要創建索引呢?這是因為,創建索引可以大大提高系統的性能。第一,通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。第二,可以大大加快 數據的檢索速度,這也是創建索引的最主要的原因。第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。第四,在使用分組和排序 子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
也許會有人要問:增加索引有如此多的優點,為什麼不對表中的每一個列創建一個索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優點, 但是,為表中的每一個列都增加索引,是非常不明智的。這是因為,增加索引也有許多不利的一個方面。第一,創建索引和維護索引要耗費時間,這種時間隨著數據 量的增加而增加。第二,索引需要佔物理空間,除了數據表占數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。 第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
索引是建立在資料庫表中的某些列的上面。因此,在創建索引的時候,應該仔細考慮在哪些列上可以創建索引,在哪些列上不能創建索引。一般來說,應該在這些列 上創建索引,例如:在經常需要搜索的列上,可以加快搜索的速度;在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;在經常用在連接的列上,這 些列主要是一些外鍵,可以加快連接的速度;在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;在經常需要排序的列上創 建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
同樣,對於有些列不應該創建索引。一般來說,不應該創建索引的的這些列具有下列特點:第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因 為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。第二,對於那 些只有很少數據值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比 例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。第三,對於那些定義為text, image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要麼相當大,要麼取值很少。第四,當修改性能遠遠大於檢索性能時,不應該創建索 引。這是因為,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因 此,當修改性能遠遠大於檢索性能時,不應該創建索引。
創建索引的方法和索引的特徵
創建索引的方法 51aspx.com
創建索引有多種方法,這些方法包括直接創建索引的方法和間接創建索引的方法。直接創建索引,例如使用CREATE INDEX語句或者使用創建索引向導,間接創建索引,例如在表中定義主鍵約束或者唯一性鍵約束時,同時也創建了索引。雖然,這兩種方法都可以創建索引,但 是,它們創建索引的具體內容是有區別的。
使用CREATE INDEX語句或者使用創建索引向導來創建索引,這是最基本的索引創建方式,並且這種方法最具有柔性,可以定製創建出符合自己需要的索引。在使用這種方式 創建索引時,可以使用許多選項,例如指定數據頁的充滿度、進行排序、整理統計信息等,這樣可以優化索引。使用這種方法,可以指定索引的類型、唯一性和復合 性,也就是說,既可以創建聚簇索引,也可以創建非聚簇索引,既可以在一個列上創建索引,也可以在兩個或者兩個以上的列上創建索引。
通過定義主鍵約束或者唯一性鍵約束,也可以間接創建索引。主鍵約束是一種保持數據完整性的邏輯,它限製表中的記錄有相同的主鍵記錄。在創建主鍵約束時,系 統自動創建了一個唯一性的聚簇索引。雖然,在邏輯上,主鍵約束是一種重要的結構,但是,在物理結構上,與主鍵約束相對應的結構是唯一性的聚簇索引。換句話 說,在物理實現上,不存在主鍵約束,而只存在唯一性的聚簇索引。同樣,在創建唯一性鍵約束時,也同時創建了索引,這種索引則是唯一性的非聚簇索引。因此, 當使用約束創建索引時,索引的類型和特徵基本上都已經確定了,由用戶定製的餘地比較小。
當在表上定義主鍵或者唯一性鍵約束時,如果表中已經有了使用CREATE INDEX語句創建的標准索引時,那麼主鍵約束或者唯一性鍵約束創建的索引覆蓋以前創建的標准索引。也就是說,主鍵約束或者唯一性鍵約束創建的索引的優先 級高於使用CREATE INDEX語句創建的索引。
索引的特徵
索引有兩個特徵,即唯一性索引和復合索引。
唯一性索引保證在索引列中的全部數據是唯一的,不會包含冗餘數據。如果表中已經有一個主鍵約束或者唯一性鍵約束,那麼當創建表或者修改表時,SQL Server自動創建一個唯一性索引。然而,如果必須保證唯一性,那麼應該創建主鍵約束或者唯一性鍵約束,而不是創建一個唯一性索引。當創建唯一性索引 時,應該認真考慮這些規則:當在表中創建主鍵約束或者唯一性鍵約束時,SQL Server自動創建一個唯一性索引;如果表中已經包含有數據,那麼當創建索引時,SQL Server檢查表中已有數據的冗餘性;每當使用插入語句插入數據或者使用修改語句修改數據時,SQL Server檢查數據的冗餘性:如果有冗餘值,那麼SQL Server取消該語句的執行,並且返回一個錯誤消息;確保表中的每一行數據都有一個唯一值,這樣可以確保每一個實體都可以唯一確認;只能在可以保證實體 完整性的列上創建唯一性索引,例如,不能在人事表中的姓名列上創建唯一性索引,因為人們可以有相同的姓名。
復合索引就是一個索引創建在兩個列或者多個列上。在搜索時,當兩個或者多個列作為一個關鍵值時,最好在這些列上創建復合索引。當創建復合索引時,應該考慮 這些規則:最多可以把16個列合並成一個單獨的復合索引,構成復合索引的列的總長度不能超過900位元組,也就是說復合列的長度不能太長;在復合索引中,所 有的列必須來自同一個表中,不能跨表建立復合列;在復合索引中,列的排列順序是非常重要的,因此要認真排列列的順序,原則上,應該首先定義最唯一的列,例 如在(COL1,COL2)上的索引與在(COL2,COL1)上的索引是不相同的,因為兩個索引的列的順序不同;為了使查詢優化器使用復合索引,查詢語 句中的WHERE子句必須參考復合索引中第一個列;當表中有多個關鍵列時,復合索引是非常有用的;使用復合索引可以提高查詢性能,減少在一個表中所創建的 索引數量。
索引的類型
根據索引的順序與數據表的物理順序是否相同,可以把索引分成兩種類型。一種是數據表的物理順序與索引順序相同的聚簇索引,另一種是數據表的物理順序與索引順序不相同的非聚簇索引。
聚簇索引的體系結構
索引的結構類似於樹狀結構,樹的頂部稱為葉級,樹的其它部分稱為非葉級,樹的根部在非葉級中。同樣,在聚簇索引中,聚簇索引的葉級和非葉級構成了一個樹狀 結構,索引的最低級是葉級。在聚簇索引中,表中的數據所在的數據頁是葉級,在葉級之上的索引頁是非葉級,索引數據所在的索引頁是非葉級。在聚簇索引中,數 據值的順序總是按照升序排列。
應該在表中經常搜索的列或者按照順序訪問的列上創建聚簇索引。當創建聚簇索引時,應該考慮這些因素:每一個表只能有一個聚簇索引,因為表中數據的物理順序 只能有一個;表中行的物理順序和索引中行的物理順序是相同的,在創建任何非聚簇索引之前創建聚簇索引,這是因為聚簇索引改變了表中行的物理順序,數據行按 照一定的順序排列,並且自動維護這個順序;關鍵值的唯一性要麼使用UNIQUE關鍵字明確維護,要麼由一個內部的唯一標識符明確維護,這些唯一性標識符是 系統自己使用的,用戶不能訪問;聚簇索引的平均大小大約是數據表的百分之五,但是,實際的聚簇索引的大小常常根據索引列的大小變化而變化;在索引的創建過 程中,SQL Server臨時使用當前資料庫的磁碟空間,當創建聚簇索引時,需要1.2倍的表空間的大小,因此,一定要保證有足夠的空間來創建聚簇索引。
當系統訪問表中的數據時,首先確定在相應的列上是否存在有索引和該索引是否對要檢索的數據有意義。如果索引存在並且該索引非常有意義,那麼系統使用該索引 訪問表中的記錄。系統從索引開始瀏覽到數據,索引瀏覽則從樹狀索引的根部開始。從根部開始,搜索值與每一個關鍵值相比較,確定搜索值是否大於或者等於關鍵 值。這一步重復進行,直到碰上一個比搜索值大的關鍵值,或者該搜索值大於或者等於索引頁上所有的關鍵值為止。
非聚簇索引的體系結構
非聚簇索引的結構也是樹狀結構,與聚簇索引的結構非常類似,但是也有明顯的不同。
在非聚簇索引中,葉級僅包含關鍵值,而沒有包含數據行。非聚簇索引表示行的邏輯順序。 非聚簇索引有兩種體系結構:一種體系結構是在沒有聚簇索引的表上創建非聚簇索引,另一種體系結構是在有聚簇索引的表上創建非聚簇索引。
如果一個數據表中沒有聚簇索引,那麼這個數據表也稱為數據堆。當非聚簇索引在數據堆的頂部創建時,系統使用索引頁中的行標識符指向數據頁中的記錄。行標識 符存儲了數據所在位置的信息。數據堆是通過使用索引分配圖(IAM)頁來維護的。IAM頁包含了數據堆所在簇的存儲信息。在系統表sysindexes 中,有一個指針指向了與數據堆相關的第一個IAM頁。系統使用IAM頁在數據堆中瀏覽和尋找可以插入新的記錄行的空間。這些數據頁和在這些數據頁中的記錄 沒有任何的順序並且也沒有鏈接在一起。在這些數據頁之間的唯一的連接是IAM中記錄的順序。當在數據堆上創建了非聚簇索引時,葉級中包含了指向數據頁的行 標識符。行標識符指定記錄行的邏輯順序,由文件ID、頁號和行ID組成。這些行的標識符維持唯一性。非聚簇索引的葉級頁的順序不同於表中數據的物理順序。 這些關鍵值在葉級中以升序維持。
當非聚簇索引創建在有聚簇索引的表上的時候,系統使用索引頁中的指向聚簇索引的聚簇鍵。聚簇鍵存儲了數據的位置信息。如果某一個表有聚簇索引,那麼非聚簇 索引的葉級包含了映射到聚簇鍵的聚簇鍵值,而不是映射到物理的行標識符。當系統訪問有非聚簇索引的表中數據時,並且這種非聚簇索引創建在聚簇索引上,那麼 它首先從非聚簇索引來找到指向聚簇索引的指針,然後通過使用聚簇索引來找到數據。
當需要以多種方式檢索數據時,非聚簇索引是非常有用的。當創建非聚簇索引時,要考慮這些情況:在預設情況下,所創建的索引是非聚簇索引;在每一個表上面,可以創建不多於249個非聚簇索引,而聚簇索引最多隻能有一個。
系統如何訪問表中的數據
一般地,系統訪問資料庫中的數據,可以使用兩種方法:表掃描和索引查找。第一種方法是表掃描,就是指系統將指針放置在該表的表頭數據所在的數據頁上,然後 按照數據頁的排列順序,一頁一頁地從前向後掃描該表數據所佔有的全部數據頁,直至掃描完表中的全部記錄。在掃描時,如果找到符合查詢條件的記錄,那麼就將 這條記錄挑選出來。最後,將全部挑選出來符合查詢語句條件的記錄顯示出來。第二種方法是使用索引查找。索引是一種樹狀結構,其中存儲了關鍵字和指向包含關 鍵字所在記錄的數據頁的指針。當使用索引查找時,系統沿著索引的樹狀結構,根據索引中關鍵字和指針,找到符合查詢條件的的記錄。最後,將全部查找到的符合 查詢語句條件的記錄顯示出來。
在SQL Server中,當訪問資料庫中的數據時,由SQL Server確定該表中是否有索引存在。如果沒有索引,那麼SQL Server使用表掃描的方法訪問資料庫中的數據。查詢處理器根據分布的統計信息生成該查詢語句的優化執行規劃,以提高訪問數據的效率為目標,確定是使用 表掃描還是使用索引。
索引的選項
在創建索引時,可以指定一些選項,通過使用這些選項,可以優化索引的性能。這些選項包括FILLFACTOR選項、PAD_INDEX選項和SORTED_DATA_REORG選項。
使用FILLFACTOR選項,可以優化插入語句和修改語句的性能。當某個索引頁變滿時,SQL Server必須花費時間分解該頁,以便為新的記錄行騰出空間。使用FILLFACTOR選項,就是在葉級索引頁上分配一定百分比的自由空間,以便減少頁 的分解時間。當在有數據的表中創建索引時,可以使用FILLFACTOR選項指定每一個葉級索引節點的填充的百分比。預設值是0,該數值等價於100。在 創建索引的時候,內部索引節點總是留有了一定的空間,這個空間足夠容納一個或者兩個表中的記錄。在沒有數據的表中,當創建索引的時候,不要使用該選項,因 為這時該選項是沒有實際意義的。另外,該選項的數值在創建時指定以後,不能動態地得到維護,因此,只應該在有數據的表中創建索引時才使用。
PAD_INDEX選項將FILLFACTOR選項的數值同樣也用於內部的索引節點,使內部的索引節點的填充度與葉級索引的節點中的填充度相同。如果沒有 指定FILLFACTOR選項,那麼單獨指定PAD_INDEX選項是沒有實際意義的,這是因為PAD_INDEX選項的取值是由FILLFACTOR選 項的取值確定的。
當創建聚簇索引時,SORTED_DATA_REORG選項清除排序,因此可以減少建立聚簇索引所需要的時間。當在一個已經變成碎塊的表上創建或者重建聚 簇索引時,使用SORTED_DATA_REORG選項可以壓縮數據頁。當重新需要在索引上應用填充度時,也使用該選項。當使用 SORTED_DATA_REORG選項時,應該考慮這些因素:SQL Server確認每一個關鍵值是否比前一個關鍵值高,如果都不高,那麼不能創建索引;SQL Server要求1.2倍的表空間來物理地重新組織數據;使用SORTED_DATA_REORG選項,通過清除排序進程而加快索引創建進程;從表中物理 地拷貝數據;當某一個行被刪除時,其所佔的空間可以重新利用;創建全部非聚簇索引;如果希望把葉級頁填充到一定的百分比,可以同時使用 FILLFACTOR選項和SORTED_DATA_REORG選項。
索引的維護
為了維護系統性能,索引在創建之後,由於頻繁地對數據進行增加、刪除、修改等操作使得索引頁發生碎塊,因此,必須對索引進行維護。
使用DBCC SHOWCONTIG語句,可以顯示表的數據和索引的碎塊信息。當執行DBCC SHOWCONTIG語句時,SQL Server瀏覽葉級上的整個索引頁,來確定表或者指定的索引是否嚴重碎塊。DBCC SHOWCONTIG語句還能確定數據頁和索引頁是否已經滿了。當對表進行大量的修改或者增加大量的數據之後,或者表的查詢非常慢時,應該在這些表上執行 DBCC SHOWCONTIG語句。當執行DBCC SHOWCONTIG語句時,應該考慮這些因素:當執行DBCC SHOWCONTIG語句時,SQL Server要求指定表的ID號或者索引的ID號,表的ID號或者索引的ID號可以從系統表sysindexes中得到;應該確定多長時間使用一次 DBCC SHOWCONTIG語句,這個時間長度要根據表的活動情況來定,每天、每周或者每月都可以。
使用DBCC DBREINDEX語句重建表的一個或者多個索引。當希望重建索引和當表上有主鍵約束或者唯一性鍵約束時,執行DBCC DBREINDEX語句。除此之外,執行DBCC DBREINDEX語句還可以重新組織葉級索引頁的存儲空間、刪除碎塊和重新計算索引統計。當使用執行DBCC DBREINDEX語句時,應該考慮這些因素:根據指定的填充度,系統重新填充每一個葉級頁;使用DBCC DBREINDEX語句重建主鍵約束或者唯一性鍵約束的索引;使用SORTED_DATA_REORG選項可以更快地創建聚簇索引,如果沒有排列關鍵值, 那麼不能使用DBCC DBREINDEX語句;DBCC DBREINDEX語句不支持系統表。另外,還可以使用資料庫維護規劃向導自動地進行重建索引的進程。
統計信息是存儲在SQL Server中的列數據的樣本。這些數據一般地用於索引列,但是還可以為非索引列創建統計。SQL Server維護某一個索引關鍵值的分布統計信息,並且使用這些統計信息來確定在查詢進程中哪一個索引是有用的。查詢的優化依賴於這些統計信息的分布准確 度。查詢優化器使用這些數據樣本來決定是使用表掃描還是使用索引。當表中數據發生變化時,SQL Server周期性地自動修改統計信息。索引統計被自動地修改,索引中的關鍵值顯著變化。統計信息修改的頻率由索引中的數據量和數據改變數確定。例如,如 果表中有10000行數據,1000行數據修改了,那麼統計信息可能需要修改。然而,如果只有50行記錄修改了,那麼仍然保持當前的統計信息。除了系統自 動修改之外,用戶還可以通過執行UPDATE STATISTICS語句或者sp_updatestats系統存儲過程來手工修改統計信息。使用UPDATE STATISTICS語句既可以修改表中的全部索引,也可以修改指定的索引。
使用SHOWPLAN和STATISTICS IO語句可以分析索引和查詢性能。使用這些語句可以更好地調整查詢和索引。SHOWPLAN語句顯示在連接表中使用的查詢優化器的每一步以及表明使用哪一 個索引訪問數據。使用SHOWPLAN語句可以查看指定查詢的查詢規劃。當使用SHOWPLAN語句時,應該考慮這些因素。SET SHOWPLAN_ALL語句返回的輸出結果比SET SHOWPLAN_TEXT語句返回的輸出結果詳細。然而,應用程序必須能夠處理SET SHOWPLAN_ALL語句返回的輸出結果。SHOWPLAN語句生成的信息只能針對一個會話。如果重新連接SQL Server,那麼必須重新執行SHOWPLAN語句。STATISTICS IO語句表明輸入輸出的數量,這些輸入輸出用來返回結果集和顯示指定查詢的邏輯的和物理的I/O的信息。可以使用這些信息來確定是否應該重寫查詢語句或者 重新設計索引。使用STATISTICS IO語句可以查看用來處理指定查詢的I/O信息。
就象SHOWPLAN語句一樣,優化器隱藏也用來調整查詢性能。優化器隱藏可以對查詢性能提供較小的改進,並且如果索引策略發生了改變,那麼這種優化器隱 藏就毫無用處了。因此,限制使用優化器隱藏,這是因為優化器隱藏更有效率和更有柔性。當使用優化器隱藏時,考慮這些規則:指定索引名稱、當 index_id為0時為使用表掃描、當index_id為1時為使用聚簇索引;優化器隱藏覆蓋查詢優化器,如果數據或者環境發生了變化,那麼必須修改優 化器隱藏。
索引調整向導
索引調整向導是一種工具,可以分析一系列資料庫的查詢語句,提供使用一系列資料庫索引的建議,優化整個查詢語句的性能。對於查詢語句,需要指定下列內容:
查詢語句,這是將要優化的工作量
包含了這些表的資料庫,在這些表中,可以創建索引,提高查詢性能
在分析中使用的表
在分析中,考慮的約束條件,例如索引可以使用的最大磁碟空間
這里指的工作量,可以來自兩個方面:使用SQL Server捕捉的軌跡和包含了SQL語句的文件。索引調整向導總是基於一個已經定義好的工作量。如果一個工作量不能反映正常的操作,那麼它建議使用的索 引不是實際的工作量上性能最好的索引。索引調整向導調用查詢分析器,使用所有可能的組合評定在這個工作量中每一個查詢語句的性能。然後,建議在整個工作量 上可以提高整個查詢語句的性能的索引。如果沒有供索引調整向導來分析的工作量,那麼可以使用圖解器立即創建它。一旦決定跟蹤一條正常資料庫活動的描述樣 本,向導能夠分析這種工作量和推薦能夠提高資料庫工作性能的索引配置。
索引調整向導對工作量進行分析之後,可以查看到一系列的報告,還可以使該向導立即創建所建議的最佳索引,或者使這項工作成為一種可以調度的作業,或者生成一個包含創建這些索引的SQL語句的文件。
索引調整向導允許為SQL Server資料庫選擇和創建一種理想的索引組合和統計,而不要求對資料庫結構、工作量或者SQL Server內部達到專家的理解程度。總之,索引調整向導能夠作到以下幾個方面的工作:
通過使用查詢優化器來分析工作量中的查詢任務,向有大量工作量的資料庫推薦一種最佳的索引混合方式
分析按照建議作出改變之後的效果,包括索引的用法、表間查詢的分布和大量工作中查詢的工作效果
為少量查詢任務推薦調整資料庫的方法
通過設定高級選項如磁碟空間約束、最大的查詢語句數量和每個索引的最多列的數量等,允許定製推薦方式
圖解器
圖解器能夠實時抓取在伺服器中運行的連續圖片,可以選取希望監測的項目和事件,包括Transact-SQL語句和批命令、對象的用法、鎖定、安全事件和 錯誤。圖解器能夠過濾這些事件,僅僅顯示用戶關心的問題。可以使用同一台伺服器或者其他伺服器重復已經記錄的跟蹤事件,重新執行那些已經作了記錄的命令。 通過集中處理這些事件,就能夠很容易監測和調試SQL Server中出現的問題。通過對特定事件的研究,監測和調試SQL Server問題變得簡單多了。
查詢處理器
查詢處理器是一種可以完成許多工作的多用途的工具。在查詢處理器中,可以互動式地輸入和執行各種Transact-SQL語句,並且在一個窗口中可以同時 查看Transact-SQL語句和其結果集;可以在查詢處理器中同時執行多個Transact-SQL語句,也可以執行腳本文件中的部分語句;提供了一 種圖形化分析查詢語句執行規劃的方法,可以報告由查詢處理器選擇的數據檢索方法,並且可以根據查詢規劃調整查詢語句的執行,提出執行可以提高性能的優化索 引建議,這種建議只是針對一條查詢語句的索引建議,只能提高這一條查詢語句的查詢性能。
系統為每一個索引創建一個分布頁,統計信息就是指存儲在分布頁上的某一個表中的一個或者多個索引的關鍵值的分布信息。當執行查詢語句時,為了提高查詢速度 和性能,系統可以使用這些分布信息來確定使用表的哪一個索引。查詢處理器就是依賴於這些分布的統計信息,來生成查詢語句的執行規劃。執行規劃的優化程度依 賴於這些分布統計信息的准確步驟的高低程度。如果這些分布的統計信息與索引的物理信息非常一致,那麼查詢處理器可以生成優化程度很高的執行規劃。相反,如 果這些統計信息與索引的實際存儲的信息相差比較大,那麼查詢處理器生成的執行規劃的優化程度則比較低。
查詢處理器從統計信息中提取索引關鍵字的分布信息,除了用戶可以手工執行UPDATE STATISTICS之外,查詢處理器還可以自動收集統計這些分布信息。這樣,就能夠充分保證查詢處理器使用最新的統計信息,保證執行規劃具有很高的優化 程度,減少了維護的需要。當然,使用查詢處理器生成的執行規劃,也有一些限制。例如,使用執行規劃只能提高單個查詢語句的性能,但是可能對整個系統的性能 產生正面的或者付面的影響,因此,要想提高整個系統的查詢性能,應該使用索引調整向導這樣的工具。
結論
在以前的SQL Server版本中,在一個查詢語句中,一個表上最多使用一個索引。而在SQL Server 7.0中,索引操作得到了增強。SQL Server現在使用索引插入和索引聯合演算法來實現在一個查詢語句中的可以使用多個索引。共享的行標識符用於連接同一個表上的兩個索引。如果某個表中有一 個聚簇索引,因此有一個聚簇鍵,那麼該表上的全部非聚簇索引的葉節點使用該聚簇鍵作為行定位器,而不是使用物理記錄標識符。如果表中沒有聚簇索引,那麼非 聚簇索引繼續使用物理記錄標識符指向數據頁。在上面的兩種情況中,行定位器是非常穩定的。當聚簇索引的葉節點分開時,由於行定位器是有效的,所以非聚簇索 引不需要被修改。如果表中沒有聚簇索引,那麼頁的分開就不會發生。而在以前的版本中,非聚簇索引使用物理記錄標識符如頁號和行號,作為行的定位器。例如, 如果聚簇索引(數據頁)發生分解時,許多記錄行被移動到了一個新的數據頁,因此有了多個新的物理記錄標識符。那麼,所有的非聚簇索引都必須使用這些新的物 理記錄標識符進行修改,這樣就需要耗費大量的時間和資源。
索引調整向導無論對熟練用戶還是新用戶,都是一個很好的工具。熟練用戶可以使用該向導創建一個基本的索引配置,然後在基本的索引配置上面進行調整和定製。新用戶可以使用該向導快速地創建優化的索引。
參考:
Ⅳ 資料庫索引有什麼作用和好處
使用索引可快速訪問資料庫表中的特定信息。
建立索引的目的是加快對表中記錄的查找或排序。
為表設置索引要付出代價的:一是增加了資料庫的存儲空間,二是在插入和修改數據時要花費較多的時間(因為索引也要隨之變動)。
Ⅳ 資料庫索引優缺點
優點:資料庫系統是用來管理數據的,建立的數理邏輯和集合操作基礎上的。
具有高效、可靠、完整、自同步等特性,是業務系統進行數據控制的最佳選擇。
資料庫系統一般提供高效的數據控制和數據檢索功能,採用SQL語言來進行數據操作。
目前市面上流行的資料庫系統很多:較小型的資料庫系統有:mysql,MSSQL_SERVER等等,適用於企業級的大型資料庫有:ORACEL,DB2(IBM),INFORMIX(IBM)等等
缺點:安全性不夠,加了用戶級密碼容易破解
C/S 結構下對伺服器要求很高,否則容易造成 MDB 損壞並發數255。
但是對高強度操作適應性差,如果伺服器不夠好,網路不夠好,編程的方法不夠好,6-7個人同時訪問就能導致 MDB 損壞或者並死不能將 VBA 代碼開發的軟體系統直接編譯成 EXE 可執行文件。
不能脫離 ACCESS 或者 ACCESS RUNTIME 環境,該環境相對其他軟體體積較大(50M左右)
Ⅵ 什麼叫聚集索引,建立索引的好處。
1、聚集索引:又叫聚簇索引,物理索引,與基表的物理順序相同,數據值的順序總是按照順序排列 CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW(允許有重復記錄的聚簇索引) 2、非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)3、索引的好處: 1)創建唯一性索引,保證資料庫表中每一行數據的唯一性
2)大大加快數據的檢索速度,這也是創建索引的最主要的原因
3)加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
4)在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
5)通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的性能。 4、索引的缺點: 1)創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加
2)索引需要佔物理空間,除了數據表占數據空間之外,每一個索引還要佔一定的物理空 間, 如果要建立 聚簇索引,那麼需要的空間就會更大。
3)當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度