php - Mysql 查询花费太多时间

标签 php mysql sql

我正在我的 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`";

大约需要 30 秒,这太慢了。我的 table 是 enter image description here

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

最佳答案

尝试以下查询:

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 语句中不必要的相关子查询。您似乎只想在 type1 时有条件地对选票求和。如果是,则使用 CASE 语句形式的条件聚合。

如果此更改不能使您足够快,请考虑在 timestampserver_id 列上添加索引。添加此类索引应该允许 WHERE 子句更有效地执行。

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

关于php - Mysql 查询花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43730296/

相关文章:

mysql - 无法在 SQL 中显示正确的列表

mysql - 试图查询 rails 数据库

PHP Group by foreach 循环

php - 将功能拆分到不同的文件中是否更好?

PHP:Is_numeric 在 0 上返回 false

php - AWS RDS : How to access/connect to RDS MySql DB From localhost

php - phpdoc的多个子包

php - 如何为每个唯一行选择最早的实例[min(timestamp)]

mysql - 我怎样才能连接三个表

mysql - 在mysql php中以特定格式显示消息