程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 什麼情況下需要創建MySQL索引?,情況創建mysql索引

什麼情況下需要創建MySQL索引?,情況創建mysql索引

編輯:MySQL綜合教程

什麼情況下需要創建MySQL索引?,情況創建mysql索引


索引可以提高數據的檢索效率,也可以降低數據庫的IO成本,並且索引還可以降低數據庫的排序成本。排序分組操作主要消耗的就是CPU資源和內存,所以能夠在排序分組操作中好好的利用索引將會極大地降低CPU資源的消耗。

如何判定是否需要創建索引?

1、較頻繁地作為查詢條件的字段

這個都知道。什麼是教頻繁呢?分析你執行的所有SQL語句。最好將他們一個個都列出來。然後分析,發現其中有些字段在大部分的SQL語句查詢時候都會用到,那麼就果斷為他建立索引。

2、唯一性太差的字段不適合建立索引

什麼是唯一性太差的字段。如狀態字段、類型字段。那些只存儲固定幾個值的字段,例如用戶登錄狀態、消息的status等。這個涉及到了索引掃描的特性。例如:通過索引查找鍵值為A和B的某些數據,通過A找到某條相符合的數據,這條數據在X頁上面,然後繼續掃描,又發現符合A的數據出現在了Y頁上面,那麼存儲引擎就會丟棄X頁面的數據,然後存儲Y頁面上的數據,一直到查找完所有對應A的數據,然後查找B字段,發現X頁面上面又有對應B字段的數據,那麼他就會再次掃描X頁面,等於X頁面就會被掃描2次甚至多次。以此類推,所以同一個數據頁可能會被多次重復的讀取,丟棄,在讀取,這無疑給存儲引擎極大地增加了IO的負擔。

3、更新太頻繁地字段不適合創建索引

當你為這個字段創建索引時候,當你再次更新這個字段數據時,數據庫會自動更新他的索引,所以當這個字段更新太頻繁地時候那麼就是不斷的更新索引,性能的影響可想而知。大概被檢索幾十次會更新一次的字段才比較符合建立索引的規范。而如果一個字段同一個時間段內被更新多次,那麼果斷不能為他建立索引。

4、不會出現在where條件中的字段不該建立索引

這個相信大家都知道。


mysql索引建多了有什壞處

建立索引常用的規則如下:

1、表的主鍵、外鍵必須有索引;
2、數據量超過300的表應該有索引;
3、經常與其他表進行連接的表,在連接字段上應該建立索引;
4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;
5、索引應該建在選擇性高的字段上;
6、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;
7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替: A、正確選擇復合索引中的主列字段,一般是選擇性較好的字段; B、復合索引的幾個字段是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引; C、如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引; D、如果復合索引所包含的字段超過3個,那麼仔細考慮其必要性,考慮減少復合的字段; E、如果既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引;
8、頻繁進行數據操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執行計劃造成負面影響; 以上是一些普遍的建立索引時的判斷依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對性能都毫無益處:在表上建立的每個索引都會增加存儲開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低數據增加刪除時的性能,特別是對頻繁更新的表來說,負面影響更大
 

oracle數據庫什情況下創建索引比較好

索引就好象一本字典的目錄。憑借字典的目錄,我們可以非常迅速的找到我們所需要的條目。數據庫也是如此。憑借Oracle數據庫的索引,相關語句可以迅速的定位記錄的位置,而不必去定位整個表。
   雖然說,在表中是否創建索引,不會影響到Oracle數據庫的使用,也不會影響數據庫語句的使用。這就好像即使字典沒有目錄的話,用戶仍然可以使用它一 樣。可是,若字典沒有目錄,那麼可想而知,用戶要查某個條目的話,其不得不翻遍整本字典。數據庫也是如此。若沒有建立相關索引的話,則數據庫在查詢記錄的 時候,不得不去查詢整個表。當表中的記錄比較多的時候,其查詢效率就會很低。所以,合適的索引,是提高數據庫運行效率的一個很好的工具。
   不過,並不是說表上的索引越多越好。過之而不及。故在數據庫設計過程中,還是需要為表選擇一些合適的索引。寧缺勿濫,這是建立索引時的一個遵循標准。在 理論上,雖然一個表可以設置無限的索引。但是,數據庫管理員需要知道,表中的索引越多,維護索引所需要的開銷也就越大。每當數據表中記錄有增加、刪除、更 新變化的時候,數據庫系統都需要對所有索引進行更新。故數據庫表中的索引絕對不是多多益善。具體來說,在索引建立上,筆者對大家有如下建議。
  建議一:在基數小的字段上要善於使用位圖索引。
create bitmap index index_name on table_name (column_name);
  基數是位圖索引中的一個基本的定義,它是指數據庫表中某個字段內容中不重復的數值。如在員工信息表中的性別字段,一般就只有男跟女兩個值,所以,其基數為2;婚姻狀況字段的話,則其只有已婚、未婚、離婚三種狀態,其基數就為3;民族一覽內也是只有有限的幾個值。
  對於要查詢基數小的字段,如現在用戶想查找所有婚姻狀況為已婚的女性時,利用位圖索引可以提高查詢的效率。這主要是因為標准索引是通過在索引中保存排序過的索引列以及對應的ROWID來實現的。若我們在基數小的列上建立標准索引的話,則其會返回大量的記錄。
   而當我們在創建位圖索引的時候,在Oracle會對整個表進行掃描,並且會為索引列的每個取值建立一個位圖。若內容相同,則在位圖上會以一個相同的數字 表示。此時,若這個字段的基數比較小的話,則若需要實現對整個字段的查詢的話,效率就會非常的高。因為此時,數據庫只要位圖中數字相同的內容找出來即可。
   除了在數據表某列基數比較小的情況下,采用位圖索引外,我們往往在一些特殊的情況下,也會建議采用位圖索引。最常見的情況是,在Where限制條件中, 若我們多次采用AND或者OR條件時,也建議采用位圖索引。因為當一個查詢飲用了一些部署了位圖索引的列的時候,這些位圖可以很方便的與AND或者Or 運算符操作結合以快速的找出用戶所需要的記錄。
  但是,這裡要注意,不是在條件語句中包含運算符的時候,采用位圖索引都能夠提供比較高的 效率。一般來說,只有AND 或者OR運算符的時候,位圖索引才會比較具有優勢。若此時用戶采用大於號或者不等於號作為條件語句中的限制條件的時候,則往往采用標准索引具有更大的優 勢。
  所以,筆者在數據庫設置中,一般只有在三種情況下才采用位圖索引。一是列的基數比較小,而有可能需要根據這些字段的內容查找相關的 記錄;二是在條件語句中,用到了AND或者OR運算符的時候。除了這兩種情況外,最好能夠采用其他適合的索引。第三種情況是,需要用到NULL作為查詢的 限制條件。因為標准查詢一般情況下,會忽略所有的NULL值列。也就是說,若需要查詢所有沒有身份證號碼的員工的信息......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved