mysql - "SELECT/*!N SQL_NO_CACHE */* FROM ` mytable `"mean in in MySQL' s 慢查询日志是什么?

标签 mysql

我刚刚打开 slow query logging在我的 MySQL 数据库上,将以下内容添加到 /etc/mysql/my.cnf:

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1

当我运行 mysqldumpslow 时,它会输出以下内容:

Reading mysql slow query log from mysql-slow.log
Count: 1  Time=199.23s (199s)  Lock=0.00s (0s)  Rows=32513.0 (32513), ...
 SELECT /*!N SQL_NO_CACHE */ * FROM `mytable`

...

查看原始mysql-slow.log,完整的查询是:

SELECT /*!40001 SQL_NO_CACHE */ * FROM `mytable`;

所以 mysqldumpslow 只是用 N 替换了数字(以帮助聚合类似的查询。)

那么,问题是,该查询来自哪里以及 /*!40001 SQL_NO_CACHE */ 位是什么意思?

据我所知,它可能来自正在执行备份的 mysqldump 命令(因此不需要缓存数据),这看起来对吗?如果是这样,既然它只读取了 32,000 行,为什么需要 199 秒?

在其他表上还有很多类似的查询,需要 100 秒、50 秒,再到更合理的 3 秒,大多数大约有 10-20,000 行,最大的有 450,000 行。

最佳答案

/*!40001 SQL_NO_CACHE */ 表示在 mysql >= 4.0.1 的版本中执行 SELECT SQL_NO_CACHE * FROM mytable 而在更早的版本中执行该命令而不SQL_NO_CACHE。

mysqldump 也使用 /*!40001 SQL_NO_CACHE */ 语法。

我不知道为什么你的查询会这么慢。

关于mysql - "SELECT/*!N SQL_NO_CACHE */* FROM ` mytable `"mean in in MySQL' s 慢查询日志是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282788/

相关文章:

php - Jquery 脚本未显示在 firebug 或触发中

python - 在 python 中使用 MysqlDb 将 null 转换为 None

MySQL inner join 不同的结果

MySQL——分层选择

javascript - 当在 AJAX、Jquery 中使用 GET 更新数据库时,如何反射(reflect)表上的更新

mysql - inode 使用显示全零的 : how to understand this

mysql - 为数据库列提供额外的大小/长度有什么缺点吗?

php - PDO 将默认获取模式设置为 FETCH_UNIQUE

php - 使用php从mysql中的出生日期计算年龄

mysql - MCF : Can't provision mysql service