什么情況下需要創(chuàng)建MySQL索引?
索引可以提高數(shù)據(jù)的檢索效率,也可以降低數(shù)據(jù)庫的IO成本,并且索引還可以降低數(shù)據(jù)庫的排序成本。排序分組操作主要消耗的就是CPU資源和內(nèi)存,所以能夠在排序分組操作中好好的利用索引將會極大地降低CPU資源的消耗。
如何判定是否需要創(chuàng)建索引?
1、較頻繁地作為查詢條件的字段
這個都知道。什么是教頻繁呢?分析你執(zhí)行的所有SQL語句。最好將他們一個個都列出來。然后分析,發(fā)現(xiàn)其中有些字段在大部分的SQL語句查詢時候都會用到,那么就果斷為他建立索引。
2、唯一性太差的字段不適合建立索引
什么是唯一性太差的字段。如狀態(tài)字段、類型字段。那些只存儲固定幾個值的字段,例如用戶登錄狀態(tài)、消息的status等。這個涉及到了索引掃描的特性。例如:通過索引查找鍵值為A和B的某些數(shù)據(jù),通過A找到某條相符合的數(shù)據(jù),這條數(shù)據(jù)在X頁上面,然后繼續(xù)掃描,又發(fā)現(xiàn)符合A的數(shù)據(jù)出現(xiàn)在了Y頁上面,那么存儲引擎就會丟棄X頁面的數(shù)據(jù),然后存儲Y頁面上的數(shù)據(jù),一直到查找完所有對應A的數(shù)據(jù),然后查找B字段,發(fā)現(xiàn)X頁面上面又有對應B字段的數(shù)據(jù),那么他就會再次掃描X頁面,等于X頁面就會被掃描2次甚至多次。以此類推,所以同一個數(shù)據(jù)頁可能會被多次重復的讀取,丟棄,在讀取,這無疑給存儲引擎極大地增加了IO的負擔。
3、更新太頻繁地字段不適合創(chuàng)建索引
當你為這個字段創(chuàng)建索引時候,當你再次更新這個字段數(shù)據(jù)時,數(shù)據(jù)庫會自動更新他的索引,所以當這個字段更新太頻繁地時候那么就是不斷的更新索引,性能的影響可想而知。大概被檢索幾十次會更新一次的字段才比較符合建立索引的規(guī)范。而如果一個字段同一個時間段內(nèi)被更新多次,那么果斷不能為他建立索引。
4、不會出現(xiàn)在where條件中的字段不該建立索引
這個相信大家都知道。
相關文章
MySQL中的insert set 和 insert values用法
這篇文章主要介紹了MySQL中的insert set 和 insert values用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08Windows服務器下MySql數(shù)據(jù)庫單向主從備份詳細實現(xiàn)步驟分享
將主服務器中的MySql數(shù)據(jù)庫同步到從服務器中,使得對主服務器的操作可以即時更新到從服務器,避免主服務器因環(huán)境或者網(wǎng)絡異常一時無法使用,達到備份效果,這篇文章整理的確實挺詳細的2012-05-05MySQL提取Json內(nèi)部字段轉儲為數(shù)字
本文主要介紹了MySQL提取Json內(nèi)部字段轉儲為數(shù)字,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2021-07-07六條比較有用的MySQL數(shù)據(jù)庫操作的SQL語句小結
本文我們主要介紹了MySQL數(shù)據(jù)庫中的六條比較有用的SQL語句,對于初學者來說,可以直接套用下面的格式即可完成相應的功能,希望本次的介紹能夠對您有所幫助。2011-08-08macOS 下的 MySQL 8.0.17 安裝與簡易配置教程圖解
這篇文章主要介紹了macOS 下的 MySQL 8.0.17 安裝與簡易配置教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09