当前位置: 首页 > 知识库问答 >
问题:

Mysql查询占用太多时间

后星河
2023-03-14

我正在我的SQL中使用一个查询。首先我用

SELECT
    FROM_UNIXTIME(`points`.`timestamp`, '%Y-%m-%d') AS `date`,
    (SELECT  COALESCE(SUM(`points`.`votes`),0) FROM `points`
     WHERE `type` = 1 AND `server_id` = 24 AND
           FROM_UNIXTIME(`points`.`timestamp`, '%Y-%m-%d') = `date`) AS `votes_count`
FROM `points`
WHERE `points`.`timestamp` > UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) AND
      `server_id` = 24
GROUP BY `date`
ORDER BY `date`";

我该怎么做才能让它快过2秒

共有1个答案

充昌勋
2023-03-14

请尝试以下查询:

SELECT
    FROM_UNIXTIME(`timestamp`, '%Y-%m-%d') AS `date`,
    SUM (CASE WHEN type = 1 THEN votes ELSE 0 END) AS votes_count
FROM points
WHERE `timestamp` > UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY) AND
      server_id = 24
GROUP BY FROM_UNIXTIME(`timestamp`, '%Y-%m-%d')
ORDER BY `date`

在这里,我删除了select语句中不必要的相关子查询。当类型1时,您似乎只想有条件地求和投票。如果是,则使用case语句形式的条件聚合。

如果此更改不能使您快速完成,那么可以考虑在timestampserver_id列上添加索引。添加这样的索引应允许where子句更有效地执行。

最后,请避免使用关键字命名列,例如datetimestamp。虽然它们不是保留的关键字,但它们在例如创建新表的上下文中仍然具有特殊的含义。

 类似资料:
  • MySQLdump和上传过程花费了太长的时间(~8小时)来完成整个过程。 我正在将活动数据库转储到mysqldump.tar文件和几乎3GB。当我加载到新的数据库,它需要6-8小时来完成这个过程(上传到新的数据库)。 我要完成这个过程,推荐的解决方案是什么?

  • 问题内容: SQL: 用户索引: 个人资料索引 解释 : 上面的查询大约需要0.1221 我怎样才能使其运行更快? 问题答案: 我删除了此查询,因此搜索完成后不会显示总结果数。 似乎是临时解决方案,甚至是永久解决方案。

  • 此select语句返回4k行。在我的应用程序中占用时间的是while循环。单循环就需要2到4分钟。关于如何优化它有什么想法吗? 不要太担心查询本身,因为它不会在查询响应上花费太多时间。

  • 我有一个大型的实时数据库,其中大约1000个用户每分钟更新2个或更多的更新。同时,有4个用户正在获取报告和添加新的项目。到目前为止,主表包含大约200万和400万行。 使用这些表的查询花费了太多时间,即使是简单的查询,如: 分别用了10秒和26秒 大报告现在只需15分钟!!!太,太,太多时间了。 我使用的所有桌子都是innodb 在我读到关于名誉的文章之前,有没有什么方法可以解决这个问题?? 事先

  • 目前,我正在开发一个社交媒体网站,用户可以像Facebook一样发布任何内容。现在我已经开发了一个从数据库过滤帖子的高级搜索。例如,数据库中有40,000个条目,我想通过高级搜索过滤行。例如,如果我搜索网站,它会显示正确的条目,但如果我搜索图像或视频,它会重复结果。 我只有40,000行,但在结果中显示了2,51,905个条目。这是我的疑问 我在等你的回应。谢谢.

  • 问题内容: 询问: 两个表都有8k记录,但是为什么它却很慢,需要2-3分钟,有时还要多一些? OMG,该查询使mysql服务器停机。将在一秒钟内回复你们人民:( 建议所有为这些索引编制索引的人都是正确的。是的,我写的查询既傻又马车。感谢纠正我。 问题答案: 还考虑对表建立索引。我们正在100万以上的记录表上运行多个左联接,这些联接不需要一两秒钟就能返回结果。