Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大型表中的Mysql查询日期_Mysql_Date_Count_Sum_Between - Fatal编程技术网

大型表中的Mysql查询日期

大型表中的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

我的查询运行了大约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(), 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)上有覆盖索引吗?