導航:首頁 > 數據處理 > 資料庫的索引是什麼

資料庫的索引是什麼

發布時間:2022-01-23 03:59:33

A. 資料庫中 索引的定義 是什麼~

索引用來快速地尋找那些具有特定值的記錄

B. 什麼是資料庫索引

第二次回答:
問題補充:能不能具體點,新建一個索引就可以了嗎
基本上可以這么說,不過你也可以修改索引。

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

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

第一次回答:
一、索引是什麼

索引是與表或視圖關聯的磁碟上結構,可以加快從表或視圖中檢索行的速度。索引包含由表或視圖中的一列或多列生成的鍵。這些鍵存儲在一個結構(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_ProctVendor_VendorID
ON Purchasing.ProctVendor (VendorID, VendorName);
GO

C. 資料庫索引是什麼,有什麼優點和缺點

資料庫中索引的優缺點
為什麼要創建索引呢?這是因為,創建索引可以大大提高系統的性能。第一,通過創建唯一性索引,可以保證資料庫表中每一行數據的唯一性。第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
也許會有人要問:增加索引有如此多的優點,為什麼不對表中的每一個列創建一個索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優點,但是,為表中的每一個列都增加索引,是非常不明智的。這是因為,增加索引也有許多不利的一個方面。第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。第二,索引需要佔物理空間,除了數據表占數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
索引是建立在資料庫表中的某些列的上面。因此,在創建索引的時候,應該仔細考慮在哪些列上可以創建索引,在哪些列上不能創建索引。一般來說,應該在這些列上創建索引,例如:在經常需要搜索的列上,可以加快搜索的速度;在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的;在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
同樣,對於有些列不應該創建索引。一般來說,不應該創建索引的的這些列具有下列特點:第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。第二,對於那些只有很少數據值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。第三,對於那些定義為text,
image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要麼相當大,要麼取值很少。第四,當修改性能遠遠大於檢索性能時,不應該創建索引。這是因為,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引。

D. 資料庫中的索引是什麼意思有什麼用途

索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。

一個索引是存儲的表中一個特定列的值數據結構(最常見的是B-Tree,還有哈希表索引和R-tree)。索引是在表的列上創建。所以,要記住的關鍵點是索引包含一個表中列的值,並且這些值存儲在一個數據結構中。請記住記住這一點:索引是一種數據結構

使用索引的全部意義就是通過縮小一張表中需要查詢的記錄(行)的數目來加快搜索的速度

假設有一張學生名單表,有一百條數據。要查詢其中名字為 小明 的學生。

一般採取select * from students where name ='小明';由於我們想要得到每一個名字為小明的學生信息,在查詢到第一個符合條件的行後,不能停止查詢,因為可能還有其他符合條件的行。所以,必須一行一行的查找直到最後一行-這就意味資料庫不得不檢查上千行數據才能找到所以名字為小明的學生。這就是所謂的全表掃描。

假設我們在 name這一列上創建一個B-Tree索引。當我們用SQL查找名字是『小明』的學生時,不需要再掃描全表。而是用索引查找去查找名字為『小明』的學生,因為索引已經按照按字母順序排序。索引已經排序意味著查詢一個名字會快很多,因為名字首字母為『小』的學生都是排列在一起的。另外重要的一點是,索引同時存儲了表中相應行的指針以獲取其他列的數據。

E. 資料庫中的索引是什麼意思

什麼是索引:
索引是資料庫存儲引擎用於快速查找到指定數據的一種數據結構。
可以用新華字典做類比:如果新華字典中對每個字的詳細解釋是資料庫中表的記錄,那麼按部首或拼音等排序的目錄就是索引,使用它可以讓我們快速查找的某一個字詳細解釋的位置。
在MySQL中,存儲引擎也是用了類似的方法,先在索引中找到對應的值,然後再根據匹配的索引值找到對應表中記錄的位置。
面試中為什麼問索引:
之所以在索引在面試中經常被問到,就是因為:索引是資料庫的良好性能表現的關鍵,也是對查詢能優化最有效的手段。索引能夠輕易地把查詢性能提高幾個數量級。
然而,糟糕的索引也同樣會影響查詢性能,當表中的數據量越來越多的時候,索引對性能的影響就越大。在數據量比較少並且負責比較低的時候,糟糕的索引對性能的影響可能不明顯,但是當數據量逐漸增多的時候,性能會急劇下降。
索引的類型:
不同類型的索引,可以為不同場景提供更好的性能。在MySQL中,索引是在存儲引擎層面實現的,而不是在伺服器層面實現的。正如大家所知道,MySQL支持多種類型的存儲引擎。所以,在不同存儲引擎中索引的實現方式並不是一樣的,也不是所有類型的索引都被所有存儲引擎支持的,即使多個存儲引擎支持同一種類型的索引,它底層的實現也有可能是不相同的。

F. 什麼是資料庫索引,是怎麼工作的

索引就是把資料庫表中的數據根據指導的欄位進行分區,這樣在查詢時資料庫會先根據查詢欄位找到分區,再在分區中查指定的數據,這樣縮小查詢范圍,提高查詢效率。

G. mysql資料庫中的索引有那些,有什麼用

索引是指把你設置為索引的欄位A的內容儲存在一個獨立區間S里,裡面只有這個欄位的內容。在找查這個與這個欄位A的內容時會直接從這個獨立區間里查找,而不是去到數據表裡查找。找到的這些符合條件的欄位後再讀取欄位A所指向真實的數據記錄的物理地址,再把對應的數據內容輸出。 如果你查找的不是索引的欄位那麼他會從數據表裡面查找。因為數據表有很多不相關的欄位,資料庫程序是不會省略不查找。要判斷那些不相關的欄位以及多次在記錄中跳轉是花費一定的資源的。 當然不是設置越多索引就越好。因為索引都放到這個獨立區間S,獨立區間S越大搜索所佔的資源就越大。如果你只有一個欄位為索引,那麼你搜索這個欄位是非常快速的。 你想了解更多有關方面的知識你可以學習一下數據結構。推薦這本書:http://www.douban.com/subject/1139426/你可以直接到當當網去網購,免運費。

閱讀全文

與資料庫的索引是什麼相關的資料

熱點內容
在職教師如何代理招生 瀏覽:551
交易中的杠桿怎麼理解 瀏覽:194
衡陽男裝店代理多少錢 瀏覽:187
jcd數據平台是什麼 瀏覽:306
化妝品批發市場哪裡多 瀏覽:610
廣東有哪些大數據學院 瀏覽:39
惠州個人商務信息咨詢電話多少 瀏覽:844
建行td交易平台有哪些 瀏覽:179
sql如何新建資料庫表間關系圖 瀏覽:671
花唄怎麼刪掉交易 瀏覽:357
如何在網上查船隻信息 瀏覽:816
做交易有什麼忌諱 瀏覽:620
dj市場有什麼 瀏覽:506
醫院信息部是做什麼工作的 瀏覽:103
南方電網代理購電是什麼意思 瀏覽:928
雞什麼時候才能交易 瀏覽:395
抖音評論數據哪裡看 瀏覽:581
學信網手機版如何修改個人信息 瀏覽:424
菜市場賣鹵水怎麼樣 瀏覽:68
什麼數據分析方案好 瀏覽:975