什麽是指數?
MySQL官方將索引定義為:索引是幫助MySQL高效獲取數據的數據結構。我們可以簡單地將其理解為:壹種可以快速找出順序的數據結構。Mysql索引主要有兩種結構:b+樹索引和哈希索引。除非另有說明,我們通常所說的索引壹般是指按B樹結構組織的索引(b+樹索引)。指標如圖所示:
最外面的淺藍色磁盤塊1包含數據17和35(深藍色)以及指針P1、P2和P3(黃色)。指針P1指示壹個小於17的磁盤塊,P2在17-35之間,P3指向壹個大於35的磁盤塊。真實數據存在於子葉節點中,即底層3、5、9、10和13。非葉節點不存儲真實數據,只存儲引導搜索方向的數據項,如17和35。
搜索過程:例如,要搜索28個數據項,首先將磁盤塊1加載到內存中,生成壹個I/O,並使用二分搜索法來確定指向P2的指針。然後發現在26和30之間,通過P2指針的地址將磁盤塊3加載到內存中,並發生第二次I/O。用同樣的方法找到磁盤塊8,第三個I/O發生了。
真實情況是上面三層的b+樹可以表示數百萬個數據,而數百萬個數據只有三次I/O而不是數百萬次I/O,因此時間改進是巨大的。
數據表索引可以提高數據檢索的效率,降低數據庫的IO成本,降低數據庫的排序成本。排序和分組操作主要消耗CPU資源和內存,因此在排序和分組操作中使用好索引將大大減少CPU資源的消耗。下面我們將簡單分析如何正確創建MySQL數據索引。
如何判斷是否需要創建索引?
1,當某些字段頻繁用作查詢條件時,需要對其進行索引。
這個大家應該都知道,什麽是頻繁?全面分析您執行的所有SQL語句。最好壹個壹個列出來。然後分析,發現其中壹些字段會在大多數SQL語句查詢中使用,便果斷地為他構建了索引。
2.唯壹性差的字段不適合索引。
什麽是唯壹性差的字段?例如狀態字段和類型字段。僅存儲壹些固定值的字段,如用戶登錄狀態、消息狀態等。這涉及到索引掃描的特性。例如,如果您通過索引查找壹些鍵值為A和B的數據,並通過A找到壹些匹配的數據,這些數據在第X頁上,然後繼續掃描,發現符合A的數據出現在第Y頁上,那麽存儲引擎將丟棄第X頁上的數據,然後將數據存儲在第Y頁上,直到找到與A對應的所有數據,然後在第X頁上找到與字段B對應的數據,然後它將再次掃描第X頁,這等於。以此類推,因此同壹數據頁可能會被重復讀取、丟棄和讀取,這無疑大大增加了存儲引擎的IO負擔。
3.更新過於頻繁的字段不適合創建索引。
為字段創建索引時,如果再次更新該字段的數據,數據庫將自動更新其索引,因此當該字段更新過於頻繁時,索引將不斷更新,性能影響可想而知。在更新之前已經搜索了幾十次的字段更符合建立索引的規範。但是,如果壹個字段在同壹時間段內更新了多次,則果斷性無法對其進行索引。
4.不應索引不會出現在where條件中的字段。
這個沒什麽好說的,索引不會用作查詢條件的字段是沒有用的。
摘要