Mysql邏輯分層:自上而下(連接層_——服服務(wù)層——引擎層——存儲層)
存儲引擎;
Innodb:事務(wù)優(yōu)先(適合高并發(fā)操作)
Myisam:性能優(yōu)先(表鎖)
查詢數(shù)據(jù)庫引擎:
支持哪些引擎?show engines;
查看當前使用的引擎育灸?show variables like '%storage_engine%';
其他優(yōu)化方法友绝;
exists / in
select * from table where exists / in (子查詢);
如果主查詢的數(shù)據(jù)量大蠢笋,則用In
如果子查詢的數(shù)據(jù)量大雇卷,則用exist??? (exists 語法:將主查詢的結(jié)果放到子查詢結(jié)果中進行條件校驗(看子查詢是否有數(shù)據(jù),如果有數(shù)據(jù)鲸睛,則校驗成功娜饵,)
慢查詢?nèi)罩荆海睿?/p>
show variables like '%slow_query_log%';
臨時開啟——在內(nèi)存中開啟:set global slow_query_log = 1;
永久開啟:/etc/my.cnf 中追加配置:vi / etc / my.cnf
重啟Mysql服務(wù):service mysql restart;
slow_query_log =1
slow_query_log_file=/var / lib /mysql / localhost-slow.log
慢查詢閾值默認10秒命令;show variables like 'long_query_time';
臨時設(shè)置閾值:set global long_query_time =5;? ———設(shè)置完成后腊凶,重新登陸起效划咐。(不需要重啟服務(wù))
永久設(shè)置閾值:/etc/my.cnf 中追加配置:設(shè)置完成后需要重啟服務(wù)
????????????????????????? vi / etc / my.cnf
???????????????????????? long_query_time=20
show global status like 'slow_queries%';?? ——超過閾值的SQL
通過mysqldumpslow工具查看慢SQL,可以通過一些過濾條件進行快速查出需要定位的慢SQL
-- 獲取返回記錄最多的3個SQL:
?????????????????????????????? mysqldumpslow -s r -t? 3 /var / lib /mysql / localhost-slow.log
--獲取訪問次數(shù)最多的3個SQL:
????????????????????????????? mysqldumpslow -s c -t? 3 /var / lib /mysql / localhost-slow.log
-- 獲取按照時間排序钧萍,前10條包含Left Join 查詢語句的SQL:
???????????????????????????? mysqldumpslow -s t -t? 10 -g "left loin" /var / lib /mysql / localhost-slow.log