Php Mysql查询占用太多时间
我正在sql中使用查询。首先我用Php Mysql查询占用太多时间,php,mysql,sql,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-%
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秒的时间太慢了。我的桌子是空的
我可以做什么使其速度超过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
语句中不必要的相关子查询。当类型
为1
时,您似乎只想有条件地对投票进行求和。如果是,则以CASE
语句的形式使用条件聚合
如果这个更改不够快,那么考虑在<代码>时间戳<代码>和<代码> ServsIdI/<代码>栏中添加索引。添加这样的索引应该允许
WHERE
子句更有效地执行
最后,请避免使用关键字来命名列,例如
日期
和时间戳
。虽然它们不是保留关键字,但在创建新表的上下文中,它们仍然具有特殊意义。您的列是否已编制索引?使用desc table\u name检查代码>是否正在使用索引?使用explain检查
你能解释一下为什么这个来自于_UNIXTIME(
点
时间戳,“%Y-%m-%d”)=“date”
?