搜尋
首頁資料庫mysql教程mysql的索引設計原則以及常見索引的區別的簡單介紹

下面小編就為大家帶來一篇淺談mysql索引設計原則以及常見索引的差異。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

索引定義:是一個單獨的,儲存在磁碟上的資料庫結構,其包含著對資料表裡所有記錄的引用指標.

資料庫索引的設計原則:

為了讓索引的使用效率更高,在建立索引時,必須考慮在哪些欄位上建立索引和建立哪種類型的索引。
那麼索引設計原則又是怎麼樣的呢?

1.選擇唯一性索引

唯一性索引的值是唯一的,可以更快速的透過該索引來決定某筆記錄。
例如,學生表中學號是具有唯一性的欄位。為該欄位建立唯一性索引可以很快的確定某個學生的資訊。
如果使用姓名的話,可能有同名現象,從而降低查詢速度。

2.為經常需要排序、分組和聯合操作的字段建立索引

#經常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作會浪費很多時間。
如果為其建立索引,可以有效地避免排序操作。

3.為常作為查詢條件的欄位建立索引

如果某個欄位常用來做查詢條件,那麼該欄位的查詢速度會影響整個資料表的查詢速度。因此,
為這樣的欄位建立索引,可以提高整個表的查詢速度。

4.限制索引的數目

索引的數目不是越多越好。每個索引都需要佔用磁碟空間,索引越多,需要的磁碟空間就越大。
修改表格時,對索引的重構和更新很麻煩。越多的索引,會使更新表變得很浪費時間。

5.盡量使用資料量少的索引

如果索引的值很長,那麼查詢的速度會受到影響。例如,對一個CHAR(100)類型的欄位進行全文
檢索需要的時間肯定要比CHAR(10)類型的欄位所需的時間要多。

6.盡量使用前綴來索引

如果索引欄位的值很長,最好使用值的前綴來索引。例如,TEXT和BLOG類型的字段,進行全文檢索
會很浪費時間。如果只檢索欄位的前面的若干個字符,這樣可以提高檢索速度。

7.刪除不再使用或很少使用的索引

表中的資料被大量更新,或資料的使用方式被改變後,原有的一些索引可能不再需要。資料庫管理
員應定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響。

#8.小表不應建立索引;包含大量的列並且不需要搜尋非空值的時候可以考慮不建索引

---------- ------------------------------------------------

mysql索引相關小常識:

#一、常被用來過濾記錄的字段。

1. primary key 字段, 系統自動建立主鍵的索引;
2. unique key 字段,系統自動建立對應的索引;
3. foreign key 約束所定義的作為外鍵的欄位;

4. 在查詢中用來連接表格的欄位;

5. 常用來作為排序(order by 的欄位)基準的欄位;

二、索引會佔用磁碟空間,建立不必要的索引只會形成浪費。

三、索引的建立必須考慮資料的操作方式。

1.內容很少變動,經常被查詢,為它多創建幾個索引無所謂;

2.經常性,例行變動的表而言,則需要謹慎地創建確實必要的索引;

四、primary key 和unique key的區別

##1. 作為Primary Key的域/域組不能為null。而Unique Key可以。

2. 在一個表格中只能有一個Primary Key,而多個Unique Key可以同時存在。

更大的差異在邏輯設計上, Primary Key一般在邏輯設計中用作記錄標識,這也是設置
Primary Key的本來用意, 而Unique Key只是為了保證域/域組的唯一性。

五、複合索引和單一索引

複合索引是指多字段聯合索引,查詢時經常需要這幾個字段組合一起為條件再查詢

唯一索引主要是用主鍵ID索引,儲存結構順序與物理結構一致

如:create  index  idx  on  tbl(a,b) 

#先按a排序, a相同的按b排序,所以當你查a或ab的時候,

能夠利用到這個索引.但當你只查b的時候,索引對你的幫助不大.可能可以跳躍查找.

-------------------------------------- -------

新增與刪除索引的情況:

#1、資料表的主鍵、外鍵必須有索引;

2、資料量超過300w的表應該有索引;

3、經常與其他表連接的表,在連接字段上應該建立索引;

4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;

#5、索引應該建在選擇性高的字段上;

6、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;

7、複合索引的建立需要進行仔細分析;盡量考慮用單一字段索引代替:

A、正確選擇複合索引中的主列字段,一般是選擇性較好的字段;

B、複合索引的幾個欄位是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立複合索引;否則考慮單一欄位索引;

C、如果複合索引中包含的欄位經常單獨出現在Where子句中,則分解為多個單一欄位索引;

D、如果複合索引所包含的字段超過3個,那麼仔細考慮其必要性,考慮減少複合的字段;

E、如果既有單字段索引,又有這幾個欄位上的複合索引,一般可以刪除複合索引;

8、頻繁進行資料運算的表,不要建立太多的索引;

9、刪除無用的索引,避免對執行計劃造成負面影響;

以上是一些普遍的建立索引時的判斷依據。 一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對效能都毫無益處:在表上建立的每個索引都會增加儲存開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。另外,過多的複合索引,在有單一欄位索引的情況下,一般都是沒有存在價值的;相反,還會降低資料增加刪除時的效能,特別是對頻繁更新的表來說,負面影響更大

以上是mysql的索引設計原則以及常見索引的區別的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL中的存儲過程是什麼?MySQL中的存儲過程是什麼?May 01, 2025 am 12:27 AM

存儲過程是MySQL中的預編譯SQL語句集合,用於提高性能和簡化複雜操作。 1.提高性能:首次編譯後,後續調用無需重新編譯。 2.提高安全性:通過權限控制限制數據表訪問。 3.簡化複雜操作:將多條SQL語句組合,簡化應用層邏輯。

查詢緩存如何在MySQL中工作?查詢緩存如何在MySQL中工作?May 01, 2025 am 12:26 AM

MySQL查詢緩存的工作原理是通過存儲SELECT查詢的結果,當相同查詢再次執行時,直接返回緩存結果。 1)查詢緩存提高數據庫讀取性能,通過哈希值查找緩存結果。 2)配置簡單,在MySQL配置文件中設置query_cache_type和query_cache_size。 3)使用SQL_NO_CACHE關鍵字可以禁用特定查詢的緩存。 4)在高頻更新環境中,查詢緩存可能導致性能瓶頸,需通過監控和調整參數優化使用。

與其他關係數據庫相比,使用MySQL的優點是什麼?與其他關係數據庫相比,使用MySQL的優點是什麼?May 01, 2025 am 12:18 AM

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

您如何處理MySQL中的數據庫升級?您如何處理MySQL中的數據庫升級?Apr 30, 2025 am 12:28 AM

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

您可以使用MySQL的不同備份策略是什麼?您可以使用MySQL的不同備份策略是什麼?Apr 30, 2025 am 12:28 AM

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

什麼是mySQL聚類?什麼是mySQL聚類?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

如何優化數據庫架構設計以在MySQL中的性能?如何優化數據庫架構設計以在MySQL中的性能?Apr 30, 2025 am 12:27 AM

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

您如何優化MySQL性能?您如何優化MySQL性能?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用