1、查看慢查詢日志是否開啟:show variables like ‘slow%’;
slow_launch_time:查詢超過時間才記錄,show_launch_time=2,表示查詢超過2s才記錄日志
slow_query_log:ON表示開啟,OFF表示關閉
show_query_log_file:慢查詢記錄日志存放位置
2、開啟慢查詢日志:set global slow_query_log = ON;(需要root權限)
3、查詢long_query_time 的值:show variables like ‘long%’;
數據庫服務器與WEB服務器是獨立分開的情況下。你將會經歷非常漫長的網絡延遲,僅僅是因為數據不必要的在服務器之間傳輸。
使用連接(JOIN)來代替子查詢(Sub-Queries)。連接(JOIN).. 之所以更有效率一些,是因為MySQL不需要在內存中創建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。
使用ENUM、CHAR 而不是VARCHAR,使用合理的字段屬性長度
盡可能的使用NOT NULL
固定長度的表會更快
拆分大的DELETE 或INSERT 語句
查詢的列越小越快
Where條件
在查詢中,WHERE條件也是一個比較重要的因素,盡量少並且是合理的where條件是很重要的,盡量在多個條件的時候,把會提取盡量少數據量的條件放在前面,減少後一個where條件的查詢時間。
有些where條件會導致索引無效:
where子句的查詢條件裡有!=,MySQL將無法使用索引。
where子句使用了Mysql函數的時候,索引將無效,比如:select * from tb where left(name, 4) = ‘xxx’
使用LIKE進行搜索匹配的時候,這樣索引是有效的:select * from tbl1 where name like ‘xxx%’,而like ‘%xxx%’ 時索引無效