1. 索引是什麼
1. 索引是什麼
1. 索引是表示資料的一種方式,它提供的資料順序不同於資料在磁碟上的物理儲存順序。索引的特殊作用是在表內重新排列記錄的物理位置。索引基於表的一列或多列的組合建立。使用索引時,資料以一種分類排序的方式提供給使用者,排列順序可以用create index語句控制。通常,通過在合適的字段上建立索引,可以顯著提供效能,特別是在表之間的連線欄位上建立索引。
2. 可以使用兩種方法從資料庫中檢索資料。第一種方法,通常稱為順序訪問法,要求sql掃瞄記錄下來尋找與條件匹配的記錄。這種查詢方式效率很低,但它是sql尋找正確記錄的唯一方法。回想一下過去圖書館裡大量卡片目錄把圖書歸檔的時代,假設圖書管理員把按字母排列的索引卡片拿出來,打亂它們的次序,然後把他們放回裝卡片的抽屜中。那麼當想查詢某本書的架位時,就需要從最開始一張一張地檢視,直到找到想要的圖書為止(一旦發現該書,就停止查詢)。現在假設圖書管理員講圖書按書名的字母分類,可以通過字母很快地找到有關這本書的資訊。進一步設想,如果管理員很勤快,他不僅按書名把圖書分類,而且還按作者姓名和圖書主題的順序分別建立了另外的目錄。這個過程將給圖書使用者在檢索資訊時提供很大的靈活性,而且能夠用比原來少得多的時間檢索到需要的資訊。
3. 在資料庫中增加索引,使sql能夠使用直接訪問法訪問資料。sql使用樹狀結構儲存和檢索索引的資料。資料組的指標儲存在樹的頂端,這些組成為節點。每個節點都包含指向其他節點的指標。指標指向的左端節點包含的值小於它們父節點的值;右端的值則大於父節點的值。資料庫系統從頂端節點開始查詢,並簡單地按照指標查詢下去,知道成功為止。
4. 對無索引的表進行的查詢,一般稱為全表掃瞄。全表掃瞄是資料庫伺服器用來搜尋表的每一行、直到所有符合給定條件的行返回為止的過程。
5. 如果選擇建立了索引的列名,可以看到該列中的資料實際上被排序顯示。
6. 當乙個表被刪除時,所有伴隨該錶的索引也被刪除
2. 使用索引的技巧
1. 對於小的表,使用索引不會得到任何效能的改善。
2. 在資料變化幅度較大的列上建立索引,會產生最大限度的效能改善。
3. 當查詢返回少量的資料時,索引能夠優化查詢(根據經驗,返回資料的資料量最好少於總資料量的25%)。如果經常返回大量的資料,那麼索引會增加額外開銷。
4. 索引能提高資料檢索的速度。然而,他們卻使資料更新的速度減慢。在帶有索引的一行中做許多插入、刪除或更新操作時,要特別記住這點。對於大量的插入、刪除或更新,可以考慮在實施修改時刪除索引,在完成插入、刪除或更新後,再重建索引。對於特定的修改,刪去索引並在載入資料後重建索引,可能回節省程式設計師的時間。
5. 索引在資料庫內占用空間。如果正在使用的資料庫管理系統能夠管理資料庫佔據的磁碟空間,則在規劃資料大小時,索引的大小是個考慮因素。
6. 通常總是在那些勇於兩表間連線的字段上建立索引,這樣可以大大地提高連線的速度。
7. 大多數資料庫系統不允許在乙個檢視上建立檢視,並在該檢視內對資料排序(許多系統也不允許create view語句帶有order by子句)。
8. 不要在進行定期更新或修改的字段上建立索引。需要不斷更新的索引導致的額外消耗,將抵消期望得到的任何效能上的改進。
9. 不要在同一物理介質上同時儲存索引和表。分開儲存這些物件可以避免驅動器爭用,並使查詢速度更快。
10. 索引不應在具有大量空值(null)的列上使用。
3. 在多個欄位上建立索引
1. sql允許在多個欄位上建立索引,這種索引稱為復合索引。
2. 效能改進的程度如何,將決定是使用單列索引還是使用復合索引。例如,如果大部分查詢都由乙個特定的列作為查詢條件的一部分,你也許會決定使用單列索引;另一方面,如果那些被索引的列經常被一起用作查詢的條件,你也許會建立乙個復合索引。
2. 使用帶有unique關鍵字的create index語句
1. 由於主鍵中的每個值必須是唯一的,如果為表指定主鍵,則資料庫講隱含地建立索引。主鍵和唯一約束都使系統生產索引。
3. 索引與連線
1. 當查詢中使用複雜的連線時,select語句會花費很長時間。對於大表,這個時間可能接近幾秒。在具有多個使用者的客戶機/伺服器環境中,這類操作會令應用程式的使用者及其沮喪。在經常用於連線的字段上建立索引,可以大大優化查詢效能。然而,如果建立太多的索引,可能會使系統的效能建立,而不是使速度提高。建議在一些大表(有數千條記錄的表)上使用索引。這類試驗會使你加深對sql語句優化的理解。
4. 使用聚簇索引
1. 當表被使用聚簇索引時,資料儲存在同一資料塊中,這樣就只允許極少的資料庫塊讀取從而導致更快的執行效能。當使用聚簇索引時,表內資料的物理排列將被修改。使用聚簇索引通常可以使資料檢索速度比使用傳統的非聚簇索引更快。建立聚簇索引基於將被加入聚簇索引的表,然後將這些表加入聚簇索引。然後將這些表加入聚簇索引。應該只將那些經常被連線的表加入聚簇中,不要將那些通過簡單的select語句單獨訪問的表加入聚簇索引中。
高效能 索引型別 雜湊索引以及其他索引
雜湊索引介紹 雜湊索引 hash index 基於雜湊表實現,只有精確匹配索引所有列的查詢才有效。對於每一行資料,儲存引擎都會對所有的索引列計算乙個雜湊碼 hash code 雜湊碼是乙個較小的值,並且不同鍵值的行計算出來的雜湊碼也不一樣。雜湊索引將所有的雜湊碼儲存在索引中,同時在雜湊表中儲存指向每...
高效能mysql(一) 建立高效能索引
單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...
Mysql建立高效能索引
mysql索引的基礎和型別 索引的基礎 1.索引類似於書籍的目錄,要想找到一本書的某個特定主題,需要先查詢書的目錄,定位對應的頁碼 儲存引擎使用類似的方式進行資料查詢,先去索引當中找到對應的值,然後根據匹配的索引找到對應的資料行 索引對效能的影響 大大減少伺服器需要掃瞄的資料量,比如我們資料表中有一...