在某些数据库系统中,包括MySQL,查询语句必须以分号(;
)结束查询,如下面的例子所示:
SHOW * FROM table_name;
如果在查询末尾不包含分号,提示将继续显示新的一行行,直到完成查询后,输入分号和按ENTER
键。
查找哪个查询语句导致速度下降的方法是启用并查看MySQL的慢查询日志。要完成这个操作,打开mysqld.cnf
文件,该文件用于配置MySQL服务器的选项,此文件通常存储在/etc/mysql/mysql.conf.d/
目录中:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
滚动文件,直到看到以下行:
/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
#slow_query_log = 1
#slow_query_log_file = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .
slow-query-log
:将此设置设置为1
可实现慢查询日志,slow-query-log-file
:这定义了MySQL将记录慢查询的文件,在本例中,它指向/var/log/mysql-slow.log
文件,long_query_time
:通过将此指令设置为2
,它将MySQL配置为记录超过2秒以上的查询,log_queries_not_using_indexes
:这告诉MySQL同时记录没有索引运行的查询到/var/log/mysql-slow.log
文件,慢查询日志不需要此设置,但是可以帮助查找低效查询,/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .
注意:如果你正在运行MySQL 8 ,默认情况下这些内容不会在mysqld.cnf
文件中,在这种情况下,将以下行添加到文件的底部:
. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
在启用慢查询日志之后,保存并关闭文件,然后重新启动MySQL服务:
sudo systemctl restart mysql
使用这些设置,通过查看慢查询日志找到有问题的查询语句,你可以使用less
这样做,如下所示:
sudo less /var/log/mysql_slow.log
此外,MySQL还有一个EXPLAIN
语句,它提供了有关MySQL如何执行查询的信息。