大型表中的Mysql查询日期
我的查询运行了大约10秒,这是不可接受的 我正在寻找一种提高速度的方法,但我别无选择。 我必须在一个超过1200万行的表中找到从现在到30天的记录 以下查询:大型表中的Mysql查询日期,mysql,date,count,sum,between,Mysql,Date,Count,Sum,Between,我的查询运行了大约10秒,这是不可接受的 我正在寻找一种提高速度的方法,但我别无选择。 我必须在一个超过1200万行的表中找到从现在到30天的记录 以下查询: SELECT DATE(DATE) AS FDATE, SUM(VIEW_COUNT) AS COUNT, COUNT(IP_ADDRESS) AS CLIENTS FROM VIEWS WHERE USERID = 'test' AND DATE BETWEEN ADDDATE(CURDATE(), IN
SELECT DATE(DATE) AS FDATE,
SUM(VIEW_COUNT) AS COUNT,
COUNT(IP_ADDRESS) AS CLIENTS
FROM VIEWS
WHERE USERID = 'test'
AND DATE BETWEEN ADDDATE(CURDATE(), INTERVAL -30 DAY) AND CURDATE()
GROUP BY FDATE DESC
我也试过,但效果相同:
SELECT DATE(DATE) AS FDATE,
SUM(VIEW_COUNT) AS COUNT,
COUNT(IP_ADDRESS) AS CLIENTS
FROM VIEWS
WHERE USERID = 'test'
AND DATE >= (DATE(NOW() - INTERVAL 30 DAY) + INTERVAL 0 SECOND)
GROUP BY FDATE DESC
您可以尝试使用MySQL索引,以在减少查询执行时间方面获得更好的性能
“没有索引,MySQL必须从第一行开始,然后遍历整个表来查找相关行。表越大,成本越高。如果表中有列的索引,MySQL可以快速确定要在数据文件中间寻找的位置,而不必查看所有数据。”您建议在何处使用索引?这是一个独立的表,没有对其他表的引用,因此只有主键被设置为您可以在上面的文本中看到的IDA,现在您的查询将读取所有1200万行,使用索引它将更快地确定您筛选的日期和用户ID。您无需将索引放在表上,你也可以把它们放在列上。我建议你检查一下:在(userid,date)上有覆盖索引吗?