請問TTABLE的INDEX問題 |
尚未結案
|
answer
一般會員 發表:17 回覆:10 積分:5 註冊:2004-05-14 發送簡訊給我 |
|
bigdogchina
版主 發表:238 回覆:523 積分:312 註冊:2003-04-28 發送簡訊給我 |
Hi,answer,您好!
小弟的一點淺見,請您不妨看看,或許有所啓迪:
索引(Index)的引入,主要作用是加快查詢的效能,同時能夠加速Order By和Group By子句的操作 一個表索引(Table Index)是由一組頁(Page)組成,這些頁構成了一個樹型結構。根頁通過指向另外兩個頁,把一個表的記錄從邏輯上分成兩部分。以此類推,直達葉子頁。 而索引有兩種類型:
● 聚簇索引
● 非聚簇索引
聚簇索引(Clustered Index),可以保證表中的資料的物理存儲順序和排列順序相同,它使用Table中的某一列或多列來排序記錄.
留意幾點:
① 索引值是安裝有序的次序排列
② 聚簇索引非常像一本書的目錄,目錄的順序也實際的頁碼順序是一致的
③ 每個Table都只能有一個聚簇索引,因爲一個Table中的記錄只能以一種物理順序存放
④ 通常情況下我們是對一個Table按照主碼(關鍵字 Primary key)欄位(Field)建立聚簇索引。但是也可以對其他類型的欄位(Field)建立聚簇索引,例如字元型,數值型和日期時間型欄位等
非聚簇索引,Table的物理順序與索引順序不同,既Table的資料不是按照索引排序。非聚簇索引就像一本書後的標準索引表一樣,索引表中的順序通常與實際的頁碼順序不一致,一本書可以有多個索引表啊!例如,它可以同時有主題索引和作者索引。
留意幾點:
① 雖然非聚簇索引可以提高從Table中取資料的速度,但它也會降低向表中插入和更新資料的速度
② 每當用戶改變了一個建立了非聚簇索引的表中的資料時,必須同時更新索引,因此對一個Table建立非聚簇索引時要慎重啊
③ 如果您的Table需要頻繁的更新資料,那麽就不要對它建立太多的非聚簇索引
④ 如果硬碟和記憶體足夠大,就不用考慮空間問題了,隨便用,哈哈> 既然有兩種索引,不妨來對比一下:
● 速度<>
從建立了聚簇索引的>
● 數量<>
對聚簇索引的主要限制就是一個>
● 空間<>
非聚簇索引需要大量的硬碟空間和記憶體。> 下面以 class="code">
Create [Unique] [ Clustered | NonClustered ] Index <索引名>
on { 表名 } (欄位 [ ASC | DESC ] [ ,...n ])
說明:
[Unique]:指定創建的索引是唯一的索引,如果不用這個關鍵字,創建的索引就不是唯一索引.
[Clustered | NonClustered]:指定被創建索引的類型。使用Clustered來創建聚簇索引,使用NonClustered來創建非聚簇索引。兩個中只能選一個哦!
應用:
Create Clustered Index Index_UserID on UserTable(UserID)
這是在一個名爲UserTable的表中創建了索引名爲Index_UserID的索引,假設UserTable在創建時沒有使用Parimary Key短語
Create NonClustered Index Index_UserID on UserTable(UserID)
功能同上,就只是創建的是非聚簇。 好啦,回過頭來看看您的疑惑:
引言: BCB可以用DATABASE DESKTOP來對某一個FIELD做INDEX,(這樣說應該對吧),但是我只要一增加一筆新的資料到這個TABLE後,INDEX就會亂掉(出現INDEX OUT OF DATE),也就是說我必須要重新到DATABASE DESKTOP建立一次INDEX,還是說我必須要在資料POST之前做什麽動作讓INDEX加入此筆資料。小弟我鬥膽揣測,您是否是建立的是非聚簇索引呢(Database Desktop默認設置好象是非聚簇吧),如果是請參考非聚簇索引的②。聚簇索引一經建立,就由系統使用和維護它,不需要我們去進行維護(真是方便了我這樣的懶人,哈哈) > ================================= <>人生在勤,不索何獲> <>業精於勤荒於嬉,行成於思毀於隨> <>臨淵羡魚不如退而結網> 發表人 -
------
人生在勤,不索何获? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |