MySQL優化SQL思路

一、實現功能

MySQL數據庫項目中使用,排除項目初期,項目運行中肯定會出現各種慢查詢的操作,需要優化。本文結合實際項目經驗,總結下SQL調優的思路。

二、實現步驟

1.定位需要優化SQL思路

1.業務慢:打時間日誌確認耗時的業務點(大多是由於SQL導致的)

2.MYSQL慢查詢日誌:慢查詢日誌,給where條件字段添加索引。

2.1查詢mysql慢查詢是否開啓相關配置

#查看慢查詢是否開啓,以及日誌
root@10.7.221.25 [(none)]> show variables like 'slow_query%';
+---------------------+-------------------------------------+
| Variable_name       | Value                               |
+---------------------+-------------------------------------+
| slow_query_log      | ON                                  |
| slow_query_log_file | /var/lib/mysql/cloudera-01-slow.log |
+---------------------+-------------------------------------+
2 rows in set (0.00 sec)

#查看慢查詢設置臨界時間
root@10.7.221.25 [(none)]> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.100000 |
+-----------------+----------+
1 row in set (0.00 sec)

2.2 配置慢查詢

臨時配置

默認沒有開啓慢查詢日誌記錄,通過命令臨時開啓:

mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global slow_query_log_file='/var/lib/mysql/instance-1-slow.log';
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global long_query_time=2;
Query OK, 0 rows affected (0.00 sec)
永久配置

修改配置文件達到永久配置狀態:

/etc/mysql/conf.d/mysql.cnf
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/instance-1-slow.log
long_query_time = 2
配置好後,重新啓動 MySQL 即可。

2.3 查詢慢查詢日誌:查看慢查詢語句

[root@cloudera-02 ~]# cat /var/lib/mysql/cloudera-02-slow.log 
/usr/sbin/mysqld, Version: 5.7.19-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
/usr/sbin/mysqld, Version: 5.7.19-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 2020-04-09T08:32:36.003677Z
# User@Host: root[root] @  [172.17.1.11]  Id:   169
# Query_time: 0.100692  Lock_time: 0.000174 Rows_sent: 0  Rows_examined: 1
use infodt;
SET timestamp=1586421156;
DELETE FROM `bd_batch_file` WHERE `FILE_ID` = '581d8854b9e249ac9d2195f775cf0478';
/usr/sbin/mysqld, Version: 5.7.19-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument

3.使用:explain確認執行行數

進而對需要的where條件字段添加索引

4.使用:force 強制指定索引

一個很好的實例 :利用 force index優化sql語句性能

因爲SQL會優化選擇認爲比較好的索引,但是,實際上可能並不是,所以,需要手動指定需要索引

三、總結

SQL多坑,一路走一路填。

四、參考

1.MySQL 慢查詢日誌

2.分享:詳記一次MySQL千萬級大表優化過程!

3.MySQL如何使用索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章