什么情況下需要創(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ù),一直到查找完所有對應(yīng)A的數(shù)據(jù),然后查找B字段,發(fā)現(xiàn)X頁面上面又有對應(yīng)B字段的數(shù)據(jù),那么他就會再次掃描X頁面,等于X頁面就會被掃描2次甚至多次。以此類推,所以同一個數(shù)據(jù)頁可能會被多次重復(fù)的讀取,丟棄,在讀取,這無疑給存儲引擎極大地增加了IO的負(fù)擔(dān)。
3、更新太頻繁地字段不適合創(chuàng)建索引
當(dāng)你為這個字段創(chuàng)建索引時候,當(dāng)你再次更新這個字段數(shù)據(jù)時,數(shù)據(jù)庫會自動更新他的索引,所以當(dāng)這個字段更新太頻繁地時候那么就是不斷的更新索引,性能的影響可想而知。大概被檢索幾十次會更新一次的字段才比較符合建立索引的規(guī)范。而如果一個字段同一個時間段內(nèi)被更新多次,那么果斷不能為他建立索引。
4、不會出現(xiàn)在where條件中的字段不該建立索引
這個相信大家都知道。
相關(guān)文章
MySQL數(shù)據(jù),查詢QPS,TPS數(shù)據(jù)方式
文章詳細(xì)介紹了查詢MySQL數(shù)據(jù)庫QPS和TPS的方法和工具,包括直接通過命令行、PerformanceSchema、mysqladmin、Prometheus、自動化腳本等,同時,還提供了優(yōu)化建議,如索引優(yōu)化、SQL調(diào)優(yōu)、事務(wù)控制和配置調(diào)優(yōu)2025-02-02
Mysql數(shù)據(jù)庫5.7升級到8.4的實現(xiàn)
很多情況需要升級MySQL的數(shù)據(jù)庫版本,本文主要介紹了Mysql數(shù)據(jù)庫5.7升級到8.4的實現(xiàn),文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
一文搞定MySQL binlog/redolog/undolog區(qū)別
這篇文章主要介紹了一文搞定MySQL binlog/redolog/undolog區(qū)別,作為開發(fā),我們重點需要關(guān)注的是二進制日志(binlog)和事務(wù)日志(包括redo log和undo log),本文接下來會詳細(xì)介紹這三種日志,需要的朋友可以參考下2023-04-04
mysql查詢條件not in 和 in的區(qū)別及原因說明
這篇文章主要介紹了mysql查詢條件not in 和 in的區(qū)別及原因說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

