索引是一種特殊的文件,它們包含著對數據表裡所有記錄的引用指針,相當於書本的目錄。其作用就是加快數據的檢索效率。常見索引類型有主鍵、唯一索引、複合索引、全文索引。
第一,通過創建唯一性的索引,可以保證數據庫表中每一行數據的唯一性。
第二,可以大大加快數據的檢索速度,這也使創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著的減少查詢中查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
增加索引也有許多不利的方面。
第一,創建索引和維護索引需要消耗時間,這種時間隨著數量的增加而增加。
第二,索引需要佔物理空間,除了數據表佔據數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要額空間就會更大。
第三,當對錶中的數據進行增加,刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
應該對如下的列建立索引
在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構。
在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度。
在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的範圍是連續的。
在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
在經常使用在where子句中的列上面創建索引,加快條件的判斷速度。
有些列不應該創建索引
在查詢中很少使用或者作為參考的列不應該創建索引。
對於那些只有很少數據值的列也不應該增加索引(比如性別,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度)。
對於那些定義為text,image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要么相當大,要么取值很少。
當修改性能遠遠大於檢索性能時,不應該創建索引,因為修改性能和檢索性能是矛盾的。
創建索引的方法:直接創建和間接創建(在表中定義主鍵約束或者唯一性約束時,同時也創建了索引)。
索引的特徵:
唯一性索引和復合索引。唯一性索引保證在索引列中的全部數據是唯一的,不會包含冗餘數據。複合索引就是一個索引創建在兩個列或者多個列上。可以減少一在一個表中所創建的索引數量。
訂閱:
張貼留言 (Atom)
構建「代理人級」開發環境:Google Gemini + Aider + Continue 全指南(2026)
在 2026 年的現代開發工作中,單純的「程式碼補全」早已無法滿足高效開發的需求。我們需要的是真正的 AI 代理人(Agent)級工作流 —— 能夠理解整個專案、進行系統性規劃,並自動執行跨檔案修改的強大組合。 今天我要分享的這套方案,是目前我認為最接近「代理人級」開發體...
-
🚀 資料庫設計的聖杯:正規化 vs. 反正規化的權衡藝術 💡 前言:效能與一致性的拉鋸戰 在資料庫設計的領域中,沒有「最好的設計」,只有「最適合當下場景的取捨」。開發者常常陷入兩難:是要追求極致的 資料完整性(Integrity) ,還是為了**查詢效能(Performanc...
-
🚀 PHP 多執行緒與非阻塞實戰:從「循序執行」到「高併發協程」 💡 前言:打破 PHP 「慢」與「卡」的刻板印象 當開發者面對大量郵件發送、圖片轉檔或複雜 API 呼叫時,常會感嘆 PHP 的同步阻塞特性。但事實上,透過 多執行緒、協程或事件循環 ,我們完全能讓 PHP 展...
-
從零開始:使用 FastAPI、MySQL 和 Docker 打造你的第一個電商購物車應用 引言: 哈囉,各位程式碼愛好者!你是否曾經想過要打造一個自己的網路應用程式,卻不知道從何開始?特別是對 Python 有興趣的初學者,常常會被複雜的 Web 框架和部署流程嚇到。別擔心!今...
沒有留言:
張貼留言