最近,我通过Go爹地转到了一个专门的Windows主机Plex CPanel上。我已经建立了我的网站和数据库(MySQL)
最近,我注意到我的数据库查询花费的时间比预期的要长得多。
我的桌子:


下面是一个示例:
SELECT a.snapshot_id, a.brand_id, b.brand_id
FROM snapshots a
INNER JOIN brands b
ON a.brand_id = b.brand_id
WHERE DATE(a.date_sent) = '2014/11/10'使用PhpMyAdmin,运行以下查询:
显示行0- 247 (248个总计,查询耗时30.1080秒)。
这是一个很长的时间,当这是执行在网站的主页。
对我如何优化这个问题有什么建议吗?还是服务器真的很慢?
快照表有超过45K行。
解释输出:

疯狂的发现!当比较同一数据库和表的共享宿主和专用宿主之间的行和大小时。
共享:1 023 459条记录@ 1.8GiB专用:43 916条记录@4.5
为什么会有差异?
发布于 2014-11-16 02:40:19
谢谢大家..。似乎性能问题不是查询..。我已经根据上面的建议优化了查询,并且没有看到太多的改进。
从那以后,我搬到了另一个托管服务,并注意到了一个巨大的进步。
发布于 2014-11-11 22:30:55
您正在将函数date()应用于每一行,这是非常昂贵的。
相反,以不需要任何转换函数的方式进行比较,如下所示:
WHERE a.date_sent between '2014/11/10 00:00:00' and '2014/11/10 23:59:59'并确保在该列上定义了索引,并在联接表的外键列上定义了索引。
发布于 2014-11-11 20:37:23
查询的问题是,数据库优化器很难应用其优化策略(例如索引),因为DATE()函数是查询where部分的一部分。然而,一个好的数据库引擎可能能够提供一个速度,如果查询是完全不变的重复。
除了将日期和时间分别保存到不同的数据库列(这可能是更好的方法)的一般设计建议之外,在这个答案https://stackoverflow.com/a/95256/3911010中还提出了如何避免查询中对日期的低效使用的想法。
https://stackoverflow.com/questions/26873458
复制相似问题