1.設計及模塊劃分
- 存儲(文件系統)
- 程序實例(對文件系統的管理)
- 存儲管理(一次加載多個頁)
- 緩存機制(LRU)
- SQL解析
- 日誌管理(binlog)
- 權限劃分
- 容災機制
- 索引管理
- 鎖管理
2.索引模塊
(1)爲什麼使用索引
不使用索引採用的全文檢索,當數據小的時候是很快的,但是數據很大的時候就會很慢,因此採用索引,提高查詢速度
(2)索引數據結構
- B-Tree
n階樹,每個根節點至少要有兩個孩子,每個非根節點至少要有ceil(m/2)最多m個節點,關鍵字個數是孩子節點個數-1
- B+Tree
關鍵字個數是孩子節點個數
優點:
查詢穩定
磁盤I/O減少
支持範圍統計
- hash索引
查詢很快,但是不支持範圍查詢,和排序操作,不能用部分索引查詢,不能避免表的掃描,hash值相同的就變成了線性搜索。不穩定。
3.索引和非聚簇索引
聚簇索引:主鍵,第一個唯一非空索引,默認創建一個
爲什麼要一定有一個聚簇索引呢?非聚簇索引是需要回表查詢的
4.如何定義慢查詢和優化
- 根據日誌定位慢查詢sql(慢日誌記錄查詢比較慢的sql記錄)
show variables like '%quer%';
show status like '%show_querues%'//慢sql條數
- 使用explain工具分析
type:找到數據行的類型:index 和all是要進行優化的
extra:using filesort 和using temporary 是需要優化的
- 修改sql,儘量使用索引
5.MyISAM和INNODB