索引是一種特殊的文件,它們包含著對數據表裡所有記錄的引用指針,相當於書本的目錄。其作用就是加快數據的檢索效率。常見索引類型有主鍵、唯一索引、複合索引、全文索引。
第一,通過創建唯一性的索引,可以保證數據庫表中每一行數據的唯一性。
第二,可以大大加快數據的檢索速度,這也使創建索引的最主要的原因。
第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著的減少查詢中查詢中分組和排序的時間。
第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
增加索引也有許多不利的方面。
第一,創建索引和維護索引需要消耗時間,這種時間隨著數量的增加而增加。
第二,索引需要佔物理空間,除了數據表佔據數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要額空間就會更大。
第三,當對錶中的數據進行增加,刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。
應該對如下的列建立索引
在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構。
在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度。
在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的範圍是連續的。
在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
在經常使用在where子句中的列上面創建索引,加快條件的判斷速度。
有些列不應該創建索引
在查詢中很少使用或者作為參考的列不應該創建索引。
對於那些只有很少數據值的列也不應該增加索引(比如性別,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度)。
對於那些定義為text,image和bit數據類型的列不應該增加索引。這是因為,這些列的數據量要么相當大,要么取值很少。
當修改性能遠遠大於檢索性能時,不應該創建索引,因為修改性能和檢索性能是矛盾的。
創建索引的方法:直接創建和間接創建(在表中定義主鍵約束或者唯一性約束時,同時也創建了索引)。
索引的特徵:
唯一性索引和復合索引。唯一性索引保證在索引列中的全部數據是唯一的,不會包含冗餘數據。複合索引就是一個索引創建在兩個列或者多個列上。可以減少一在一個表中所創建的索引數量。
訂閱:
張貼留言 (Atom)
網誌存檔
-
▼
2018
(30)
-
▼
11月
(13)
- 《面試官別再問》ES6中的Promise以及Promise/A+規範
- 《面試官別再問》php之api接口的設計
- 《面試官別再問》什麼是索引,作用是什麼?常見索引類型有那些?Mysql 建立索引的原則?
- 《面試官別再問》Laravel框架一:原理機制篇
- 《面試官別再問》什麼是CGI?什麼是FastCGI?php-fpm,FastCGI,Nginx 之間...
- 《面試官別再問》Redis、Memecache這兩者有什麼區別?
- 《面試官別再問》Laravel 模組
- 《面試官別再問》HTTP狀態碼有哪些?區別?
- 《面試官別再問》PHP Laravel 5如何使用JWT api authentication
- 《面試官別再問》PHP Coding Style指南PSR-2
- 《面試官別再問》PHP實現Websocket
- 《面試官別再問》PHP中$_FILES檔案上傳漏洞
- 《面試官別再問》PHP中Session與Cookie有何不同
-
▼
11月
(13)
-
詳細的請參考: 多程序還是多執行緒的選擇和區別 ,感覺這位牛人寫的特別清楚。下面我們再來看看php環境下使用多程序和多執行緒要注意的。 PHP是單進程同步模型,一個請求對應一個進程,I/O是同步阻塞的。通過nginx/apache/php-fpm等服務的擴展,才使得P...
-
這個系統的目標是讓 LINE 的訊息可以透過網頁介面讓客服人員回覆。 好的,這是一個從 LINE 用戶發送訊息開始,到客服人員在網頁上回覆的完整步驟流程: 打造高併發 LINE 客服系統:設計與實踐 前言:以技術解決即時通訊挑戰 在高流量即時通訊場景下,系統的穩定性與響應速度是企...
-
在高併發交易場景下,使用 Laravel 9 搭配 Redis 在 AWS EC2 和 RDS 環境中,需要一套全面的策略來應對挑戰。這涉及到架構設計、程式碼優化、服務配置和監控。 高併發交易問題的核心挑戰 資料庫鎖 (Database Locks) :高併發寫入導致行鎖、表鎖...
沒有留言:
張貼留言