前言
數據庫在計算機領域的應用十分普遍,你們在學習數據庫的時候,通常是按照網上的基礎教程能夠一步步入門,可是這僅僅只是會簡單地使用數據庫而已,而要真正會使用數據庫,就須要弄清楚數據庫的基本原理和組成結構.而這樣的文章在網上並很少, 所以通過個人查閱和總結,最終寫成了這篇文章,以供你們參考,文章末尾會給出參考地址,有興趣的朋友能夠自行查看.html
數據庫結構一覽

層結構

- 鏈接層主要負責安全驗證和信息傳輸
- sql層主要處理和優化sql
- 存儲層存儲真正的表數據
對數據庫而言最重要的則是查找效率,那麼咱們來理一理數據庫的查詢操做.web
數據庫中存儲與查找
數據庫的存儲
數據庫引擎
- InnoDB , 2. MyIsam , 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam
- 在平時使用中最多的仍是InnoDB和MyIsam,如下作一些簡單介紹
InnoDB
- InnoDB是一個事務型的存儲引擎,有行級鎖定和外鍵約束。
適用場景:
- 常常更新的表,適合處理多重併發的更新請求。
- 支持事務。
- 能夠從災難中恢復(經過bin-log日誌等)。
- 外鍵約束。只有他支持外鍵。
- 支持自動增長列屬性auto_increment。
數據結構:
Innodb的索引文件自己就是數據文件,即B+Tree的數據域存儲的就是實際的數據,這種索引就是彙集索引。這個索引的key就是數據表的主鍵,所以InnoDB表數據文件自己就是主索引。InnoDB的輔助索引數據域存儲的也是相應記錄主鍵的值而不是地址,因此當以輔助索引查找時,會先根據輔助索引找到主鍵,再根據主鍵索引找到實際的數據。因此Innodb不建議使用過長的主鍵,不然會使輔助索引變得過大。建議使用自增的字段做爲主鍵,這樣B+Tree的每個結點都會被順序的填滿,而不會頻繁的分裂調整,會有效的提高插入數據的效率。算法
MyIsam
- MyIASM是MySQL默認的引擎,可是它沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵,所以當INSERT(插入)或UPDATE(更新)數據時即寫操做須要鎖定整個表,效率便會低一些。
適用場景:
- 不支持事務的設計,可是並不表明着有事務操做的項目不能用MyIsam存儲引擎,能夠在service層進行根據本身的業務需求進行相應的控制。
- 不支持外鍵的表設計。
- 查詢速度很快,若是數據庫insert和update的操做比較少的話比較適用。
- 對整表進行加鎖。
- MyISAM極度強調快速讀取操做。
- MyIASM中存儲了表的行數,因而SELECT COUNT(*) FROM TABLE時只須要直接讀取已經保存好的值而不須要進行全表掃描。若是表的讀操做遠遠多於寫操做且不須要數據庫事務的支持,那麼MyIASM也是很好的選擇。
數據結構:
MyISAM索引結構: MyISAM索引用的B+ tree來儲存數據,MyISAM索引的指針指向的是鍵值的地址,地址存儲的是數據。B+Tree的數據域存儲的內容爲實際數據的地址,也就是說它的索引和實際的數據是分開的,只不過是用索引指向了實際的數據,這種索引就是所謂的非彙集索引。sql
現在咱們還會學習<數據結構><算法>等課程,會被其中的時間複雜度,效率搞得暈頭轉向,有時候很懷疑爲了這一點效率有必要如此大費周章嗎.固然,現在計算機運算速度能達到每秒萬億次,微機也可達每秒億次以上,可是當數據量一旦變大以後呢?如果對幾個G的數據查詢該怎麼辦呢?所以算法的優化在數據庫中仍是很是重要的.數據庫
索引簡介
索引優勢
索引缺點
- 索引會佔用存儲空間,可能比自己的表數據還大
- 只對查有利,增長了增刪改的負擔
使用索引的注意事項
- 字段值差異大的數據使用索引(性別列就不要用索引了)
- 字符字段能夠只選取字段的前幾位字符創建索引,能簡少存儲數據.
InnoDB
特色
- 支持事務
- 處理數據量巨大
- 表數據和索引分開存儲
- 支持行級鎖定
- 缺省 6B長度主鍵
- 主鍵自己就是索引,其索引映射的不是地址,而是主鍵,從而找到行記錄
InnoDB索引
MyISAM
特色
- 不支持事務
- 插入和查找極快
- 不支持事務
- 單純增查數據的首選
MyISAM索引
memory索引
[計算機·呂鳳萍](http://www.cpweb.gov.cn/kepu/jishu/jisuanjijishu/21141_2.html)安全