資料庫索引的初步瞭解和使用
技術標籤:SQL
資料庫中的索引型別和方法
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件
文章目錄
前言
在使用資料庫中的過程中,因為資料量的增加導致程式在訪問資料庫的速度要求高,準確快速定位展示資料就是最終的目標,個人認為能實現快速和準確就是最重要的,畢竟實現這兩個要求在業務場景複雜的情況下也是不容易的…
# 一、索引的型別? 在我們給資料庫的表進行操作時,可以根據實際情況給相應的欄位新增索引,應用具體的索引型別和索引方法,其中索引型別在mysql中通常包含四種:
Normal --- 普通索引 UNIQUE --- 唯一索引 FULLTEXT --- 全文索引 SPATIAL --- 空間索引
普通索引:(個人情況出發,別槓我認輸)使用最多,大多數情況下都可使用,提升查詢的效率
唯一索引:表示唯一性,該索引欄位值不會重複,如身份證等,遇到相應的場景時可設定為unique,比如在註冊的時候,使用者的個人賬號Account不能重複,但是會出現多個使用者同時註冊的情況並且Account一致,那這樣的話同步進行則會導致兩條記錄都插入成功,業務和邏輯上是不合理的,使用鎖的話會導致其他使用者需要等待,那麼這個時候只要給Account欄位新增唯一索引即可避免這種情況。
全文索引:通常用於長文字檢索的情況下,個人用的不多,沒得具體場景介紹,有興趣bd
空間索引:對空間資料型別的欄位建立的索引,MYSQL中的空間資料型別有4種,分別是GEOMETRY、POINT、LINESTRING、POLYGON。這個使用要求較嚴格,建立的列要求NOT NULL,並且是在MYISAM儲存引擎的表上支援,常用INNODB就沒有然後了…
二、索引的方法(BTREE 、 HASH)
在效率上HASH可以說是首選,檢索效率非常高,一次定位,Hash 索引是將索引鍵通過 Hash 運算之後,將 Hash運算結果的 Hash 值和所對應的行指標資訊存放於一個 Hash 表中。但是限制的地方較多,如:
1 不能應用於範圍查詢,經過hash演算法計算後的值得大小關係無法保持和之前一致; 在遇到大量hash值相同的情況下效率不一定高於btree; 2 無法避免全表掃描,hash索引是將索引鍵通過相應的hash計算得到hash值, 將對應的hash值和指標資訊存放在hash表中,上面說到存在相同hash值得情況, 所以即使能取到滿足hash鍵值得記錄,得到具體資料還是要訪問表中的具體資料來進行對比,得到相應的結果;
BTREE則是在樹狀結構上進行查詢,從根節點到分支節點進行多次I/O訪問,效率自然不高,但是實用(普遍性高,如同國民都會打乒乓球,但是出類拔萃頂尖的技術人還是不多的,因為要求高,所以很多人只會簡單的普遍技巧(BTREE)但是也足夠了)
總結
使用頻繁的組合為普通索引NORMAL+BTREE索引方法,保證唯一性則使用UNIQUE的索引型別,其他場景我也沒用過,別問,問就是沒有再毒打一頓