資料庫索引是什麼,有什麼用,怎麼用

2022-02-13 11:45:43 字數 4337 閱讀 8578

[此問題的推薦答案]

第二次回答:

問題補充:能不能具體點,新建乙個索引就可以了嗎

基本上可以這麼說,不過你也可以修改索引。

記住:

索引其實關鍵目的是為了加快檢索速度而建立的,所以,怎麼用索引是資料庫系統本身的事情,作為資料庫設計或使用者,設計並建立好索引然後體驗加上索引後的查詢變快的感覺就行了。所以,索引怎麼用就變為了「怎麼建立合適的索引」

以下回答是否符合你的要求?你還有什麼問題?

第一次回答:

一、索引是什麼

索引是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在乙個結構(b 樹)中,使 sql server 可以快速有效地查詢與鍵值關聯的行。

表或檢視可以包含以下型別的索引:

* 聚集

o 聚集索引根據資料行的鍵值在表或檢視中排序和儲存這些資料行。索引定義中包含聚集索引列。每個表只能有乙個聚集索引,因為資料行本身只能按乙個順序排序。

o 只有當表包含聚集索引時,表中的資料行才按排序順序儲存。如果表具有聚集索引,則該錶稱為聚集表。如果表沒有聚集索引,則其資料行儲存在乙個稱為堆的無序結構中。

* 非聚集

o 非聚集索引具有獨立於資料行的結構。非聚集索引包含非聚集索引鍵值,並且每個鍵值項都有指向包含該鍵值的資料行的指標。

o 從非聚集索引中的索引行指向資料行的指標稱為行定位器。行定位器的結構取決於資料頁是儲存在堆中還是聚集表中。對於堆,行定位器是指向行的指標。對於聚集表,行定位器是聚集索引鍵。

o 您可以向非聚集索引的葉級新增非鍵列以跳過現有的索引鍵限制(900 位元組和 16 鍵列),並執行完整範圍內的索引查詢。

聚集索引和非聚集索引都可以是唯一的。這意味著任何兩行都不能有相同的索引鍵值。另外,索引也可以不是唯一的,即多行可以共享同一鍵值。

每當修改了表資料後,都會自動維護表或檢視的索引。

索引和約束

對表列定義了 primary key 約束和 unique 約束時,會自動建立索引。例如,如果建立了表並將乙個特定列標識為主鍵,則 資料庫引擎自動對該列建立 primary key 約束和索引。有關詳細資訊,請參閱建立索引(資料庫引擎)。

二、索引有什麼用

與書中的索引一樣,資料庫中的索引使您可以快速找到表或索引檢視中的特定資訊。索引包含從表或檢視中乙個或多個列生成的鍵,以及對映到指定資料的儲存位置的指標。通過建立設計良好的索引以支援查詢,可以顯著提高資料庫查詢和應用程式的效能。索引可以減少為返回查詢結果集而必須讀取的資料量。索引還可以強制表中的行具有唯一性,從而確保表資料的資料完整性。

設計良好的索引可以減少磁碟 i/o 操作,並且消耗的系統資源也較少,從而可以提高查詢效能。對於包含 select、update、delete 或 merge 語句的各種查詢,索引會很有用。例如,在 adventureworks 資料庫中執行的查詢 select title, hiredate from humanresources.employee where employeeid = 250。執行此查詢時,查詢優化器評估可用於檢索資料的每個方法,然後選擇最有效的方法。可能採用的方法包括掃瞄表和掃瞄乙個或多個索引(如果有)。

掃瞄表時,查詢優化器讀取表中的所有行,並提取滿足查詢條件的行。掃瞄表會有許多磁碟 i/o 操作,並占用大量資源。但是,如果查詢的結果集是佔表中較高百分比的行,掃瞄表會是最為有效的方法。

查詢優化器使用索引時,搜尋索引鍵列,查詢到查詢所需行的儲存位置,然後從該位置提取匹配行。通常,搜尋索引比搜尋表要快很多,因為索引與表不同,一般每行包含的列非常少,且行遵循排序順序。

查詢優化器在執行查詢時通常會選擇最有效的方法。但如果沒有索引,則查詢優化器必須掃瞄表。您的任務是設計並建立最適合您的環境的索引,以便查詢優化器可以從多個有效的索引中選擇。sql server 提供的資料庫引擎優化顧問可以幫助分析資料庫環境並選擇適當的索引。

三、索引怎麼用

索引其實關鍵目的是為了加快檢索速度而建立的,所以,怎麼用索引是資料庫系統本身的事情,作為資料庫設計或使用者,設計並建立好索引然後體驗加上索引後的查詢變快的感覺就行了。所以,索引怎麼用就變為了「怎麼建立合適的索引」,以下說明這個問題:

索引設計不佳和缺少索引是提高資料庫和應用程式效能的主要障礙。設計高效的索引對於獲得良好的資料庫和應用程式效能極為重要。為資料庫及其工作負荷選擇正確的索引是一項需要在查詢速度與更新所需開銷之間取得平衡的複雜任務。如果索引較窄,或者說索引關鍵字中只有很少的幾列,則需要的磁碟空間和維護開銷都較少。而另一方面,寬索引可覆蓋更多的查詢。您可能需要試驗若干不同的設計,才能找到最有效的索引。可以新增、修改和刪除索引而不影響資料庫架構或應用程式設計。因此,應試驗多個不同的索引而無需猶豫。

sql server 中的查詢優化器可在大多數情況下可靠地選擇最高效的索引。總體索引設計策略應為查詢優化器提供可供選擇的多個索引,並依賴查詢優化器做出正確的決定。這在多種情況下可減少分析時間並獲得良好的效能。若要檢視查詢優化器對特定查詢使用的索引,請在 sql server management studio 中的「查詢」選單上選擇「包括實際的執行計畫」。

不要總是將索引的使用等同於良好的效能,或者將良好的效能等同於索引的高效使用。如果只要使用索引就能獲得最佳效能,那查詢優化器的工作就簡單了。但事實上,不正確的索引選擇並不能獲得最佳效能。因此,查詢優化器的任務是只在索引或索引組合能提高效能時才選擇它,而在索引檢索有礙效能時則避免使用它。

建議的索引設計策略包括以下任務:

1. 了解資料庫本身的特徵。例如,它是頻繁修改資料的聯機事務處理 (oltp) 資料庫,還是主要包含唯讀資料的決策支援系統 (dss) 或資料倉儲 (olap) 資料庫?

2. 了解最常用的查詢的特徵。例如,了解到最常用的查詢聯接兩個或多個表將有助於決定要使用的最佳索引型別。

3. 了解查詢中使用的列的特徵。例如,某個索引對於含有整數資料型別同時還是唯一的或非空的列是理想索引。篩選索引適用於具有定義完善的資料子集的列。

4. 確定哪些索引選項可在建立或維護索引時提高效能。例如,對現有某個大型表建立聚集索引將會受益於 online 索引選項。online 選項允許在建立索引或重新生成索引時繼續對基礎資料執行併發活動。

5. 確定索引的最佳儲存位置。非聚集索引可以與基礎表儲存在同乙個檔案組中,也可以儲存在不同的檔案組中。索引的儲存位置可通過提高磁碟 i/o 效能來提高查詢效能。例如,將非聚集索引儲存在表檔案組所在磁碟以外的某個磁碟上的乙個檔案組中可以提高效能,因為可以同時讀取多個磁碟。

或者,聚集索引和非聚集索引也可以使用跨越多個檔案組的分割槽方案。在維護整個集合的完整性時,使用分割槽可以快速而有效地訪問或管理資料子集,從而使大型表或索引更易於管理。有關詳細資訊,請參閱已分割槽表和已分割槽索引。在考慮分割槽時,應確定是否應對齊索引,即,是按實質上與表相同的方式進行分割槽,還是單獨分割槽。

# 設計索引。

索引設計是一項關鍵任務。索引設計包括確定要使用的列,選擇索引型別(例如聚集或非聚集),選擇適當的索引選項,以及確定檔案組或分割槽方案布置。

# 確定最佳的建立方法。按照以下方法建立索引:

* 使用 create table 或 alter table 對列定義 primary key 或 unique 約束

sql server 資料庫引擎自動建立唯一索引來強制 primary key 或 unique 約束的唯一性要求。預設情況下,建立的唯一聚集索引可以強制 primary key 約束,除非表中已存在聚集索引或指定了唯一的非聚集索引。預設情況下,建立的唯一非聚集索引可以強制 unique 約束,除非已明確指定唯一的聚集索引且表中不存在聚集索引。

還可以指定索引選項和索引位置、檔案組或分割槽方案。

建立為 primary key 或 unique 約束的一部分的索引將自動給定與約束名稱相同的名稱。

* 使用 create index 語句或 sql server management studio 物件資源管理器中的「新建索引」對話方塊建立獨立於約束的索引

必須指定索引的名稱、表以及應用該索引的列。還可以指定索引選項和索引位置、檔案組或分割槽方案。預設情況下,如果未指定聚集或唯一選項,將建立非聚集的非唯一索引。若要建立篩選索引,請使用可選的 where 子句。

# 建立索引。

要考慮的乙個重要因素是對空表還是對包含資料的表建立索引。對空表建立索引在建立索引時不會對效能產生任何影響,而向表中新增資料時,會對效能產生影響。

對大型表建立索引時應仔細計畫,這樣才不會影響資料庫效能。對大型表建立索引的首選方法是先建立聚集索引,然後建立任何非聚集索引。在對現有表建立索引時,請考慮將 online 選項設定為 on。該選項設定為 on 時,將不持有長期表鎖以繼續對基礎表的查詢或更新。

簡單的建立索引,可採用如下語句:

create index ix_productvendor_vendorid

on purchasing.productvendor (vendorid, vendorname);

go

電視HDMI介面是什麼 有什麼用 怎麼用

hdmi介面是什麼 hdmi介面的誕生 電視hdmi介面怎麼用 電視hdmi介面可以連線膝上型電腦 需要vga轉hdmi轉換器的配合,vga介面一頭插在電腦上,hdmi一頭插在電視上,然後設定電視機的訊號源輸出,選擇 hdmi訊號 利用筆記本的強大處理能力,將1080p的高畫質畫面以及高質量音訊直接...

CMake是什麼?有什麼用

cmake cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的c 特性,類似unix下的automake。假如我們有乙個深度學習框架的部分工程列表,裡面有超過40個互相呼叫...

CMake是什麼?有什麼用?

原創 andrewzhou924 最後發布於2018 05 19 09 05 20 閱讀數 10989 收藏 發布於2018 05 19 09 05 20 分類專欄 學習筆記 展開cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的m...