轉載本文章請標明作者和出處
本文出自《Darwin的程序空間》
Mysql整體分層
- 連接層
- 與客戶端進行連接的服務
- 主要完成一些類似連接的處理,授權認證及相關的安全方案
- 服務層
- 提供和新的服務功能
- 會對sql進行一些優化
- 所有跨存儲引擎層的功能都在這一層
- 查詢內存緩存的服務,提升系統性能
- 引擎層
- 真正負責Mysql的數據的存儲和提取
- 不同的存儲引擎提供不同的功能,可以根據自己的實際需求來選取
- 存儲層
- 數據存儲在計算機文件系統之上,並完成與存儲引擎的交互
存儲引擎
概念
- Mysql中的數據使用各種不同的技術存儲在文件(或者內存中);
- 這些技術中每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力;
- 通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能;
- 這些不同的技術以及配套的相關功能在Mysql中被稱之爲存儲引擎;
查看存儲引擎
show ENGINES;
查看當前使用的存儲引擎
show table status from JD(數據庫名稱) where name = "表名";
MyISAM和InnoDB的區別
- 主外鍵
- InnoDB支持
- MyISAM 不支持
- 事務
- InnoDB 支持
- MyISAM 不支持
- 行表鎖
- InnoDB 行鎖
- MyISAM 表鎖
- 緩存
- InnoDB 索引和數據均緩存,對內存要求比較高,而且內存的大小有決定性的影響
- MyISAM 表鎖
- 表空間
- InnoDB 小
- MyISAM 小
- 關注點
- InnoDB 事務
- MyISAM 性能
- 默認安裝
- InnoDB 默認支持,並且新建表默認使用
- MyISAM 默認支持
- 文件結構
- InnoDB 事務
- b.frm:描述表結構的文件,字段長度類型等
- b.ibd:存儲數據信息和索引信息
- MyISAM 性能
- b.frm:描述表結構的文件,字段長度類型等
- b.MYD:數據信息文件,存儲數據信息文件
- b.MYI:索引信息文件
- InnoDB 事務
SQL讀取的順序
-
寫sql的順序和mysql執行sql的順序:
平常我們寫sql的時候順序大概是這個樣子的:
但是sql讀取的時候順序是這個樣子的:
-
整體執行過程:
- 先對多表進行關係,然後再根據連接條件查找符合條件的記錄
- 在符合條件的基礎上再進行where條件篩選
- 對篩選出來的內容進行分組操作
- 分組完成之後使用having語句再次篩選出滿足條件的記錄
- 取所有滿足條件的記錄
- 對取出的記錄進行排序
- 最終從取出的記錄獲取limit中指定的記錄
-
mysql不支持全連接
mysql默認不支持全連接,大那是可以使用左連接union右連接的結果