ALTER TABLE bugs ADD created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
编辑:这是“回填”UPDATE语句,假设您已经添加了该created列:
UPDATE bugs b
SET created = (SELECT MIN(notetime)
FROM bugnotes
WHERE bugid=b.bugid);
EDIT2:我刚刚在 MySQL 5.6.13 Community 上分析了两个查询。这看起来更理智一些,因为这两个查询在他们的个人资料中都有类似的东西checking permissions;任何 SELECT 查询都不应该总是检查权限(可能在运行skip-grant-tables模式下除外)?我很困惑为什么之前的分析没有在一个简短的配置文件上显示权限检查。
mysql> SELECT bugid
-> , bugtitle
-> , MIN(notetime) created
-> FROM bugs b
-> LEFT OUTER JOIN bugnotes USING (bugid)
-> GROUP BY bugid, bugtitle;
+-------+----------------+---------------------+
| bugid | bugtitle | created |
+-------+----------------+---------------------+
| 1 | the first bug | 2014-03-14 00:00:00 |
| 2 | the second bug | 2014-02-14 00:00:00 |
| 3 | the third bug | 2013-03-14 00:00:00 |
+-------+----------------+---------------------+
3 rows in set (0.00 sec)
我认为你想要这样的东西(见下表定义)。我的 SQLFiddle 演示似乎发生了一些事情。
[编辑 - 在分析了作为解决方案提供的两个查询之后]
这一点对 Joshua 来说确实是一个问题——不确定我是应该把它变成一个新帖子还是继续在这里——如果有要求,我总是可以移动它。
嗨约书亚,
我是从 MySQL 开始的,所以我利用我们的交流来分析我们对 OP 的两个响应。我对我的发现有点困惑。我的需要大约 200 我们,而你的似乎需要两倍以上 - 而且你的行数要多得多(更多信息?)。我很好奇为什么?你知道发生了什么事吗?
我赶紧补充说,在运行第二个(我的)查询之前,我做了一个 RESET QUERY CACHE。我也以相反的顺序运行它们并获得了相同的结果。
我很困惑!
约书亚的询问。
我的查询。
试试下面的这个查询。请注意,它仅列出了错误及其派生的创建日期(即:不包括错误注释等)。连接
OUTER
优先返回所有错误,无论它们是否有任何相关的错误注释。但更可靠的解决方案是在表中添加一列
bugs
以自动捕获创建时间。注意:您必须使用此列的值回填任何现有的错误记录——您可以从SELECT
上面的查询中获得该值。编辑:这是“回填”
UPDATE
语句,假设您已经添加了该created
列:EDIT2:我刚刚在 MySQL 5.6.13 Community 上分析了两个查询。这看起来更理智一些,因为这两个查询在他们的个人资料中都有类似的东西
checking permissions
;任何 SELECT 查询都不应该总是检查权限(可能在运行skip-grant-tables
模式下除外)?我很困惑为什么之前的分析没有在一个简短的配置文件上显示权限检查。无论如何,我认为持续时间并不重要。
starting
我首先运行了 Verace 的查询,并且在和中花费了很多时间opening tables
。我第二次运行自己的查询,这些相同的项目花费的时间更少。如果我只是选择不同的顺序,我有 99.9% 的把握会看到相反的结果。因此,我将持续时间视为垃圾。第一个查询运行通常会承担加载缓存的工作。单独刷新 MySQL 的缓存是不够的。您的操作系统可能正在缓存磁盘块。即使您尝试刷新操作系统缓存,您的硬盘本身也可能至少有 8MB 缓存。我想如果您想用两个查询来平衡该字段,您可以交替运行它们 5 次以稳定软件和硬件缓存的任何影响。
或者另一个计划(这可能是矫枉过正):重新启动服务器,运行查询 A 并查看其配置文件。再次重新启动并运行 & profile only 查询 B。比较两个配置文件。
我的结论是在小表(例如 10 行)上进行 MySQL 分析是徒劳的。旁注,
SHOW PROFILE
在 MySQL 5.6.7+ 中已弃用,而是使用PERFORMANCE_SCHEMA
对象。.
EDIT3:示例输出。我正确地得到了每个 bugid 的一行。这是使用 Verace 制作的样本数据。如果查询对您不起作用,我怀疑我们有不同的源数据。您可以通过发布带有少量代表性数据的 SQL Fiddle 来解决这个问题,或者只是编辑您的问题并向其中添加一些示例数据。