在使用資料庫中的過程中,因為資料量的增加導致程式在訪問資料庫的速度要求高,準確快速定位展示資料就是最終的目標,個人認為能實現快速和準確就是最重要的,畢竟實現這兩個要求在業務場景複雜的情況下也是不容易的…
# 一、索引的型別? 在我們給資料庫的表進行操作時,可以根據實際情況給相應的字段新增索引,應用具體的索引型別和索引方法,其中索引型別在mysql中通常包含四種:
normal --- 普通索引
unique --- 唯一索引
fulltext --- 全文索引
spatial --- 空間索引
普通索引:(個人情況出發,別槓我認輸)使用最多,大多數情況下都可使用,提公升查詢的效率
唯一索引:表示唯一性,該索引字段值不會重複,如身份證等,遇到相應的場景時可設定為unique,比如在註冊的時候,使用者的個人賬號account不能重複,但是會出現多個使用者同時註冊的情況並且account一致,那這樣的話同步進行則會導致兩條記錄都插入成功,業務和邏輯上是不合理的,使用鎖的話會導致其他使用者需要等待,那麼這個時候只要給account欄位新增唯一索引即可避免這種情況。
全文索引:通常用於長文字檢索的情況下,個人用的不多,沒得具體場景介紹,有興趣bd
空間索引:對空間資料型別的字段建立的索引,mysql中的空間資料型別有4種,分別是geometry、point、linestring、polygon。這個使用要求較嚴格,建立的列要求not null,並且是在myisam儲存引擎的表上支援,常用innodb就沒有然後了…
在效率上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的索引型別,其他場景我也沒用過,別問,問就是沒有再毒打一頓
初步了解 資料庫系統
最近在看自考書 資料庫系統原理。學習計算機也有兩年了,前前後後做了 3次系統,都用到了資料庫。可以說對資料庫一些基本的操作比較熟悉了,但是一些抽象的理論概念,還是很模糊,好在,有了自考,我們可以在理論上更為鞏固一下。資料庫系統原理這本書的第一章就是像我們大家介紹了資料庫系統的一些基本概念。包括資料描...
資料庫學習筆記 01 初步了解
原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。事務開始前和結束後,資料庫的完整性約束沒有被破壞。比如a向b轉賬,不可能a扣了錢,b卻沒收到。隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資...
初步了解資料庫的併發控制
1.什麼是併發 假設cpu是單核的一次只能執行乙個執行緒,當多個執行緒要同時占用cpu資源的時候,只能輪流占用該cpu的資源。所以併發強調的是同一時間間隔內處理多工的能力。2.什麼是 並行 假設cpu是多核的,多個執行緒可以同時執行在多個cpu上!所以並行強調的是同一時刻處理多工的能力!和併發的區別...