索引是一種特殊的文件,它們包含著對數據表裡所有記錄的引用指針,相當於書本的目錄。其作用就是加快數據的檢索效率。常見索引類型有主鍵、唯一索引、複合索引、全文索引。
第一,通過創建唯一性的索引,可以保證數據庫表中每一行數據的唯一性。
第二,可以大大加快數據的檢索速度,這也使創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著的減少查詢中查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
增加索引也有許多不利的方面。
第一,創建索引和維護索引需要消耗時間,這種時間隨著數量的增加而增加。
第二,索引需要佔物理空間,除了數據表佔據數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要額空間就會更大。
第三,當對錶中的數據進行增加,刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
應該對如下的列建立索引
在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構。
在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度。
在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的範圍是連續的。
在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
在經常使用在where子句中的列上面創建索引,加快條件的判斷速度。
有些列不應該創建索引
在查詢中很少使用或者作為參考的列不應該創建索引。
對於那些只有很少數據值的列也不應該增加索引(比如性別,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度)。
對於那些定義為text,image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要么相當大,要么取值很少。
當修改性能遠遠大於檢索性能時,不應該創建索引,因為修改性能和檢索性能是矛盾的。
創建索引的方法:直接創建和間接創建(在表中定義主鍵約束或者唯一性約束時,同時也創建了索引)。
索引的特徵:
唯一性索引和復合索引。唯一性索引保證在索引列中的全部數據是唯一的,不會包含冗餘數據。複合索引就是一個索引創建在兩個列或者多個列上。可以減少一在一個表中所創建的索引數量。
訂閱:
張貼留言 (Atom)
熱門文章
-
從零開始:使用 FastAPI、MySQL 和 Docker 打造你的第一個電商購物車應用 引言: 哈囉,各位程式碼愛好者!你是否曾經想過要打造一個自己的網路應用程式,卻不知道從何開始?特別是對 Python 有興趣的初學者,常常會被複雜的 Web 框架和部署流程嚇到。別擔心!今...
-
資深前端工程師面試指南:Nuxt 3 生命週期與 SSR、CSR、SSG 渲染策略 在資深前端工程師的面試中, Nuxt 3 是一個熱門話題,尤其是其生命週期以及伺服器端渲染 (SSR)、客戶端渲染 (CSR) 和靜態生成 (SSG) 的應用場景。這些議題不僅考驗對框架的...
-
在資料庫設計中, 正規化 (Normalization) 和 反正規化 (Denormalization) 是兩種截然不同的策略,各有其優缺點,通常需要在實際應用場景中權衡選擇。 一、正規化 (Normalization) 定義 正規化是一套系統性的方法,用於設計關聯式資...
-
🚀 AI 革命:技術人員必須掌握的三大核心機會點 💡 前言:從「數位化」到「認知化」的範式轉移 網際網路將世界資訊 數位化 ,讓存取和傳輸成為可能。而我們正處於人工智慧(AI)革命的開端,這場革命將實現 認知和決策的自動化 。對於技術開發者、工程師和架構師而言,這不僅僅是工具...
-
PHP 多執行緒與非阻塞實戰:台灣工程師的務實選擇 前言 身為 PHP 工程師,我們常會遇到需要處理耗時操作的場景,例如發送大量郵件、處理圖片或進行複雜運算。如果這些操作都循序執行,很容易造成程式卡住,使用者體驗當然不好。這時候,「非阻塞」與「多執行緒」的概念就顯得非常重要了。 ...
-
我的第一個 FastAPI 微服務:當 Laravel 遇上智能文件辨識 作為一名主要使用 PHP (尤其是 Laravel) 進行開發的工程師,我始終對探索新的技術棧充滿熱情。最近,我將目光投向了 Python 生態系統,特別是 FastAPI ,並成功地將其與我熟悉的 Lar...
-
Vue 3 WebSocket 聊天室架構設計與實戰教學 實現高彈性、高安全的即時通訊服務 By [您的名字或暱稱] | 資深全端工程師與系統架構師 當我們從傳統的 HTTP 架構轉向 即時(Real-Time) 應用時,WebSocket 幾乎是唯一的選擇。然而,一個生產環境...
-
Django CRM 從零開始:為初學者打造的逐步教學 (重新排版) 嗨,Django 新手們!準備好踏上開發一個實用且功能強大的 CRM (客戶關係管理) 系統的旅程了嗎?Django 是一個高效的 Web 框架,它能讓您快速地建立複雜的資料庫驅動型應用程式。本教學將帶領您從零...
-
駕馭單線程的藝術:JavaScript 與 PHP 的高併發與並行架構解密 引言:跳脫「單線程」的迷思與工程師的取捨 許多初階工程師一聽到 JavaScript (Node.js) 或 PHP 是單線程,就武斷地認為它們無法處理高併發或並行計算。這錯了。 單線程只是語言執行模...
-
標題: PHP 資深工程師的 CI/CD 實踐:從概念到自動化部署的深度解析 前言:CI/CD — 現代軟體開發的加速器 在快節奏的軟體開發世界裡, 快速、可靠地交付高品質的程式碼 是每個開發團隊的共同目標。而實現這一目標的關鍵利器,就是 CI/CD (Continuous...
沒有留言:
張貼留言