Php MySQL查询使用了太多的CPU

Php MySQL查询使用了太多的CPU,php,mysql,pdo,query-optimization,Php,Mysql,Pdo,Query Optimization,我使用以下查询查找需要根据其设置和时区发送每日提醒的用户。它可以工作,但结果是,它使用了大约50%的CPU,即使我加上0100限制,它也非常沉重 它甚至会导致phpMyAdmin崩溃或其他什么 用户表:3000条记录, 职位表:12000多条记录, 设置表:3000条记录, 提醒表:80000条记录保留用户id和日期以防止重复 SELECT u.`id`, u.`fullname`, u.`email`, u.`hash`, s.`timezone` FROM `users` u

我使用以下查询查找需要根据其设置和时区发送每日提醒的用户。它可以工作,但结果是,它使用了大约50%的CPU,即使我加上0100限制,它也非常沉重

它甚至会导致phpMyAdmin崩溃或其他什么

用户表:3000条记录, 职位表:12000多条记录, 设置表:3000条记录, 提醒表:80000条记录保留用户id和日期以防止重复

   SELECT u.`id`, u.`fullname`, u.`email`, u.`hash`, s.`timezone`
   FROM `users` u
   LEFT JOIN `reminders` rm ON rm.`user_id` = u.`id` AND rm.`date` = CURDATE()
   LEFT JOIN `settings` s ON s.`user_id` = u.`id`
   LEFT JOIN `posts` p ON p.`user_id` = u.`id` AND p.`date` = DATE(CONVERT_TZ(UTC_TIMESTAMP, 'UTC', s.`timezone`))
   WHERE HOUR(CONVERT_TZ(UTC_TIMESTAMP, 'UTC', s.`timezone`)) = s.`notify_hour`
   AND s.`notify` = 1 AND u.`active` = 1 AND rm.`id` IS NULL AND p.`id` IS NULL
   GROUP BY u.`id` LIMIT 0,100
我每10分钟运行一次此查询,并通过sendgrid.com SMTP服务器发送提醒。 你能帮我优化这个查询吗,这样它就不会占用这么多资源了


谢谢你,很抱歉我的英语

你有正确的字段索引吗? 这里有一个建议:

尝试为所有表上的user_id字段编制索引,这样会更快


日期的转换也消耗了cpu时间,您应该以UTC格式将日期存储在数据库中,这样可以避免巨大的开销

首先开始-查看所有id字段上的索引策略。JetProfiler如果您有资源,我也会考虑将活动添加到索引中。Users表列名为id rest为user_id。可以吗,命名并不重要——索引很重要。命名不是问题,我实际上认为这是一个很好的命名约定。你们有并没有尝试过为这些字段建立索引?显示0-29100行,查询总共花费了0.0082秒,对吗?很好:很高兴我能帮上忙