首頁  >  文章  >  資料庫  >  SQL資料運算基礎(中級)6

SQL資料運算基礎(中級)6

黄舟
黄舟原創
2016-12-17 14:33:41922瀏覽

第十章「SQL基礎」向你初步介紹了SQL。你學會如何用SELECT語句進行查詢,你也學會如何建立自己的表格。在這一章裡,你將加深你的SQL知識。你將學習如何建立索引來加快查詢速度。你也將學會如果用更多的SQL語句和函數來操作表中的資料。

建立索引

假設你想找出本書中的某一個句子。你可以一頁一頁地逐頁搜索,但這會花很多時間。而透過使用本書的索引,你可以很快地找到你要搜尋的主題。

表的索引與附在一本書後面的索引非常相似。它可以大大提高查詢的速度。對一個較大的表來說,透過加索引,一個通常要花費幾個小時來完成的查詢只要幾分鐘就可以完成。因此沒有理由對需要頻繁查詢的表增加索引。

注意:

當你的記憶體容量或硬碟空間不足時,也許你不想給一個表增加索引。對於包含索引的資料庫,SQL Sever需要一個可觀的額外空間。例如,要建立一個聚集索引,需要大約1.2倍於資料大小的空間。要看一個表格的索引在資料庫中所佔的空間大小,你可以使用系統預存程序sp_spaceused,物件名稱指定為被索引的表名。

聚簇索引和非聚集索引

假設你已經透過本書的索引找到了一個句子所在的頁碼。一旦已經知道了頁碼後,你很可能漫無目的翻尋這本書,直到找到正確的頁碼。透過隨機的翻尋,你最終可以到達正確的頁碼。但是,有一種找到頁碼的更有效的方法。

首先,把書翻到大概一半的地方,如果要找的頁碼比半本書處的頁碼小,就書翻到四分之一處,否則,就把書翻到四分之三的地方。透過這個方法,你可以繼續把書分成更小的部分,直到找到正確的頁碼附近。這是找到書頁的非常有效的一種方法。

SQL Sever的表索引以類似的方式運作。一個表索引由一組頁組成,這些頁構成了一個樹狀結構。根頁透過指向另外兩個頁,把一個表格的記錄從邏輯上分成和兩個部分。而根頁所指向的兩頁又分別把記錄分割成更小的部分。每頁都把記錄分成更小的分割,直到到達葉級頁。

索引有兩種類型:聚集索引和非聚集索引。在聚集索引中,索引樹的葉級頁包含實際的資料:記錄的索引順序與物理順序相同。在非聚集索引中,葉級頁指向表中的記錄:記錄的物理順序與邏輯順序沒有必然的聯繫。

聚簇索引非常像目錄表,目錄表的順序與實際的頁碼順序是一致的。非聚集索引則更像書的標準索引表,索引表中的順序通常與實際的頁碼順序是不一致的。一本書也許有多個索引。例如,它也許同時有主題索引和作者索引。同樣,一個表可以有多個非聚集索引。

通常情況下,你使用的是聚集索引,但是你應該對兩種類型索引的優缺點都有所理解。

每個表只能有一個聚集索引,因為一個表格中的記錄只能以一種物理順序存放。通常你要對一個表格按照標識欄位建立聚集索引。但是,你也可以對其它類型的欄位建立叢集索引,如字元型,數值型和日期時間型欄位。

從建立了聚集索引的表中取出資料比建立了非聚集索引的表快。當你需要取出一定範圍內的資料時,用叢集索引也比用非叢集索引好。例如,假設你用一個表格來記錄訪客在你網點上的活動。如果你想取出在一定時間段內的登入訊息,你應該對這個表的DATETIME型欄位建立叢集索引。

對聚集索引的主要限制是每個表只能建立一個聚集索引。但是,一個表可以有不只一個非聚集索引。實際上,對每個表你最多可以建立249個非聚集索引。你也可以對一個表格同時建立叢集索引和非叢集索引。

假如你不僅想根據日期,而且想根據使用者名稱從你的網點活動日誌中取資料。在這種情況下,同時建立一個叢集索引和非聚集索引是有效的。你可以對日期時間欄位建立叢集索引,對使用者名字段建立非叢集索引。如果你發現你需要更多的索引方式,你可以增加更多的非聚集索引。

非聚集索引需要大量的硬碟空間和記憶體。另外,雖然非聚集索引可以提高從表中 取資料的速度,它也會降低向表中插入和更新資料的速度。每當你改變了一個建立了非聚集索引的表中的資料時,必須同時更新索引。因此你對一個表建立非聚集索引時要慎重考慮。如果你預期一個表需要頻繁地更新數據,那麼不要對它建立太多非聚集索引。另外,如果硬碟和記憶體空間有限,也應該限制使用非叢集索引的數量。

索引屬性

這兩種類型的索引都有兩個重要屬性:你可以用兩者中任一種類型同時對多個欄位建立索引(複合索引);兩種類型的索引都可以指定為唯一索引。

你可以對多個欄位建立一個複合索引,甚至是複合的聚集索引。假如有表記錄了你的網點訪客的姓和名字。如果你希望根據完整姓名從表中取數據,你需要建立一個同時對姓字段和名字字段進行的索引。這和分別對兩個欄位建立單獨的索引是不同的。當你希望同時對不只一個欄位進行查詢時,你應該建立一個對多個欄位的索引。如果你希望對各個欄位進行分別查詢,你應該對各欄位建立獨立的索引。

兩種類型的索引都可以被指定為唯一索引。如果對一個欄位建立了唯一索引,你將無法向這個欄位輸入重複的值。一個識別字段會自動成為唯一值字段,但你也可以對其它類型的字段建立唯一索引。假設你用一個表格來儲存你的網點的使用者密碼,你當然不希望兩個使用者有相同的密碼。透過強制一個字段成為唯一值字段,你可以防止這種情況的發生。


 以上就是SQL資料操作基礎(中級)6的內容,更多相關文章請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn