Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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_Sql_Mysql Select Db - Fatal编程技术网

Mysql 长响应时间

Mysql 长响应时间,mysql,sql,mysql-select-db,Mysql,Sql,Mysql Select Db,我有一个有效的MySQL查询,它从数据库中输入的每个社区中选择表的最新占用率,但它似乎在扫描整个数据库中的条目,因为查找时间大约需要3-4秒 根据下面查询中提供的详细信息,有人能为我提供一种更快/更好的方法来查找每个社区的最新时间戳字段吗?-我需要查询来选择输入的每个社区,并带有最新的时间戳,但所选社区的限制应为1(这意味着名为“Test community”的社区可能有数百个提交,但我需要选择最新输入的时间戳,以及表中输入的每个社区的相同选择) 根据我的经验,相关子查询的性能通常很差;请尝试以

我有一个有效的MySQL查询,它从数据库中输入的每个社区中选择表的最新占用率,但它似乎在扫描整个数据库中的条目,因为查找时间大约需要3-4秒

根据下面查询中提供的详细信息,有人能为我提供一种更快/更好的方法来查找每个社区的最新时间戳字段吗?-我需要查询来选择输入的每个社区,并带有最新的时间戳,但所选社区的限制应为1(这意味着名为“Test community”的社区可能有数百个提交,但我需要选择最新输入的时间戳,以及表中输入的每个社区的相同选择)


根据我的经验,相关子查询的性能通常很差;请尝试以下方法:

SELECT t1.reportID, t1.communityID, t1.region, t1.percentOccupied
    , t1.TIMESTAMP, Communities.fullName
FROM NightlyReports AS t1 
INNER JOIN Communities ON t1.communityID = Communities.communityID
INNER JOIN (
   SELECT communityID, MAX( TIMESTAMP ) AS lastTimestamp
   FROM NightlyReports 
   WHERE region = 'GA'
   GROUP BY communityID
) AS lastReports ON t1.communityID = lastReports.communityID
                AND t1.TIMESTAMP = lastReports.lastTimestamp
WHERE t1.region =  'GA' 
ORDER BY percentOccupied DESC

根据我的经验,相关子查询的性能通常很差;请尝试以下方法:

SELECT t1.reportID, t1.communityID, t1.region, t1.percentOccupied
    , t1.TIMESTAMP, Communities.fullName
FROM NightlyReports AS t1 
INNER JOIN Communities ON t1.communityID = Communities.communityID
INNER JOIN (
   SELECT communityID, MAX( TIMESTAMP ) AS lastTimestamp
   FROM NightlyReports 
   WHERE region = 'GA'
   GROUP BY communityID
) AS lastReports ON t1.communityID = lastReports.communityID
                AND t1.TIMESTAMP = lastReports.lastTimestamp
WHERE t1.region =  'GA' 
ORDER BY percentOccupied DESC

你的问题很好。对于此查询(只重写了一点):

您希望索引位于:

  • NightlyReports(地区、时间戳、社区ID)
  • NightlyReports(社区ID、时间戳)
  • 社区(社区ID)
    (可能已经存在)

相关子查询本身不是问题。

您的查询很好。对于此查询(只重写了一点):

您希望索引位于:

  • NightlyReports(地区、时间戳、社区ID)
  • NightlyReports(社区ID、时间戳)
  • 社区(社区ID)
    (可能已经存在)

相关子查询本身不是问题。

太棒了,这个查询正是我想要的,这就是我如此喜欢的原因……谢谢!你能描述一下双内连接吗?我一点也没有弄乱过查询,但这不是我以前使用过的,您可以根据需要(当然在正常范围内)连接任意多的表(或子查询),只要每个表都有一个唯一的标识符/别名。多个连接没有什么特别的,就像a+b+c实际上并不比a+b更特别。啊,好吧,这很有意义,我以后会记得的,再次感谢!太棒了,这个问题正是我想要的,这就是为什么我如此爱你…谢谢!你能描述一下双内连接吗?我一点也没有弄乱过查询,但这不是我以前使用过的,您可以根据需要(当然在正常范围内)连接任意多的表(或子查询),只要每个表都有一个唯一的标识符/别名。多个连接没有什么特别的,就像a+b+c实际上并不比a+b更特别。啊,好吧,这很有意义,我以后会记得的,再次感谢!隐马尔可夫模型。。。回顾这个问题,我很好奇。您是说您提供的备选查询(仍然包含相关子查询)与@uuerdo的答案一样快吗?我将对此进行测试,但我很好奇,因为您提到子查询可以以不同的方式使用,因为它“本身不是问题”。@ViaTech。可以更快,特别是在给定索引的情况下。我提供这个答案是因为它更接近你最初的查询。嗯。。。回顾这个问题,我很好奇。您是说您提供的备选查询(仍然包含相关子查询)与@uuerdo的答案一样快吗?我将对此进行测试,但我很好奇,因为您提到子查询可以以不同的方式使用,因为它“本身不是问题”。@ViaTech。可以更快,特别是在给定索引的情况下。我提供了这个答案,因为它更接近您最初的查询。
SELECT nr.reportID, nr.communityID, nr.region, nr.percentOccupied,  
       nr.TIMESTAMP, c.fullName
FROM NightlyReports nr INNER JOIN
     Communities c
     ON nr.communityID = c.communityID
WHERE nr.TIMESTAMP = (SELECT MAX(nr2.TIMESTAMP)
                      FROM NightlyReports nr2
                      WHERE nr.communityID = nr2.communityID
                     ) AND
     nr.region =  'GA'
ORDER BY percentOccupied DESC;