目的
根據發現的問題,找到原因,然後對症下藥
發現問題(主動/被動)
問題點:數據庫查詢過程中速度過慢的SQL語句
主動:數據庫默認情況下slow_query_log的值爲OFF,表示慢查詢日誌是禁用的
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.09 sec)
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)
被動:用戶在使用程序時候告知頁面反應慢
找到原因-對症下藥
原因點:沒有加索引、索引失效、SQL極度複雜、高併發
1.表結構設計時沒有索引導致
2.SQL語句導致索引失效
索引失效7字口訣:
模:模糊查詢LIKE以%開頭
型:數據類型錯誤
數:對索引字段使用內部函數
空:索引列是NULL
運:索引列進行四則運算
最:複合索引不按索引列最左開始查找
快:全表查找預計比索引更快
3.SQL極度複雜10張以上表聯合查詢
優化表結構和程序
4.高併發時段導致等待
在程序和數據庫之間加入緩存