物理設計階段可適當降低範式標準、保留冗余欄位以提升執行效率。
SHOW STATUS LIKE 'Com%'; -- 當前會話統計 SHOW GLOBAL STATUS LIKE 'Com%'; -- 啟動以來累計統計 重點關注:Com_select, Com_insert, Com_delete, Com_update SHOW STATUS LIKE 'Connections'; -- 嘗試連線數 SHOW STATUS LIKE 'Uptime'; -- 伺服器運行時間(秒) SHOW STATUS LIKE 'Slow_queries'; -- 慢查詢次數 SHOW VARIABLES LIKE 'long_query_time'; -- 慢查詢閾值(預設10秒)
建立 dept、emp、salgrade 三表,並透過儲存函數生成隨機字串與數字,存儲過程批量插入 18 萬員工資料與 10 筆部門資料。
-- 隨機字串函數 rand_string(n) -- 隨機部門編號函數 rand_num() -- 批量插入員工存儲過程 insert_emp(start, max_num) -- 批量插入部門存儲過程 insert_dept(start, max_num) CALL insert_emp(100001, 180000); CALL insert_dept(100, 10);
# 啟動慢查詢日誌 mysqld.exe --slow-query-log # 修改慢查詢閾值 SET long_query_time = 0.5; SHOW STATUS LIKE 'slow%';
EXPLAIN SELECT * FROM emp WHERE empno = 123456\G;
重點欄位:
type:all(全表掃描) → system → const → ref → eq_ref → 避免 allpossible_keys:可能用到的索引key:實際用到的索引rows:掃描行數估算Extra:Using filesort(需排序)、Using temporary(臨時表)、Using where(覆蓋索引)ALTER TABLE emp ADD PRIMARY KEY(empno); CREATE [UNIQUE|FULLTEXT] INDEX idx_name ON tbl_name(col...); ALTER TABLE tbl_name ADD INDEX [idx_name] (col...); SHOW INDEXES FROM tbl_name; ALTER TABLE emp DROP PRIMARY KEY; DROP INDEX idx_name ON tbl_name;
LIKE '%aaa' 不用索引,LIKE 'aaa%' 用索引OR 通常不走索引SHOW STATUS LIKE 'Handler_read_key'; -- 值越高索引越有效 SHOW STATUS LIKE 'Handler_read_rnd_next'; -- 值越高查詢效率越低