早上好,我正在尝试快速比较执行类似任务的多个查询,我想知道是否有更快的方法来排列 EXPLAIN 输出。对我来说,这个示例查询应该有效:
EXPLAIN SELECT count(*) AS thetotal, date(datetimefield) AS theday, key_id FROM dbname.tablename WHERE datetimefield >= "2015-12-12 00:00:00" AND datetimefield <= "2015-12-12 23:59:59" GROUP BY key_id UNION
EXPLAIN SELECT count(*) AS thetotal, date(datetimefield) AS theday, key_id FROM dbname.tablename WHERE DATE(datetimefield) = "2015-12-12" GROUP BY key_id, theday;
并输出如下内容:
但正如您可能知道的那样,它给出了“语法错误,意外描述”消息。有什么理由不应该这样做,或者有什么方法可以达到类似的结果吗?目前我正在对两个类似的查询运行 EXPLAIN,将它们导出到 csv,在电子表格编辑器中打开它们并将它们一行接一行地粘贴。
在此先感谢您能给我的任何帮助。
正如@jkavalik 在评论中所说,根据MySQL 文档
UNION
,只能用于组合SELECT
s的输出,而事实EXPLAIN
并非如此。但是,您可以使用 shell 中的 MySQL 命令将每个文件的原始输出排列
EXPLAIN
在一个文本文件中。为每个 EXPLAIN 语句运行一次:mysql -u $USERNAME -p$PASSWORD -Bse "[EXPLAIN STATEMENT GOES HERE]" >> explains.csv
从 MySQL 文档:
这将为您提供一个制表符分隔的行,
>>
并将附加到最后指定的文件,如果它不存在则创建它。