MySql數據庫原理剖析

前言

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


數據庫結構一覽

MySql結構圖

層結構

MySQL數據庫層結構

  • 鏈接層主要負責安全驗證和信息傳輸
  • sql層主要處理和優化sql
  • 存儲層存儲真正的表數據

對數據庫而言最重要的則是查找效率,那麼咱們來理一理數據庫的查詢操做.web

數據庫中存儲與查找

數據庫的存儲

數據庫引擎

  1. 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索引

  • 只支持B-Tree

MyISAM

特色

  • 不支持事務
  • 插入和查找極快
  • 不支持事務
  • 單純增查數據的首選

MyISAM索引

  • 只支持B-Tree

memory索引

  • 支持 B-Tree和hash
  • 參考文檔:

[計算機·呂鳳萍](http://www.cpweb.gov.cn/kepu/jishu/jisuanjijishu/21141_2.html)安全

相關文章
相關標籤/搜索