我有一个mysql db,每天早晨从oracle db导入数据。该表大约有3000万条记录。这大约需要5-6个小时。晚上,然后我复制表格,以便可以从显示表格内容网格的网站访问它。
桌子看起来像这样
id userID fieldID date1 date2
1 1 1 2014 2014
2 1 1 2014 2016
3 1 1 2013 2017
4 1 2 2014 2016
5 2 3 2014 2016
基本上在网站上,用户输入userID,我必须显示具有最新date1和最新date2的每个fieldID的记录,因此userID = 1的输出应为:
id userID fieldID date1 date2
2 1 1 2014 2016
4 1 2 2014 2016
我到目前为止使用的查询是这样的:
SELECT id,UserID,fieldID,date1,date2 FROM mytable WHERE id =
( SELECT id from mytable AS lookup
WHERE lookup.fieldID = mytable.fieldID
ORDER BY date1 DESC, date2 DESC
LIMIT 1 ) AND UserID=1
这可行,但是查询服务器和加载页面花费的时间太长,而如果我为特定的userID选择所有内容,则只需一秒钟就可以提取约2000行
我想知道您是否可以提出一个更好的查询或一种解决方法,而不是复制表,而是仅使用所需的记录来创建新表(晚上不使用网站)。
谢谢
SELECT
id,
UserID,
fieldID,
(SELECT MAX(date1) FROM mytable WHERE fieldID=mt.fieldID) As DateOne,
(SELECT MAX(date2) FROM mytable WHERE fieldID=mt.fieldID) As DateTwo,
FROM mytable mt
WHERE UserID=1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句