繁体   English   中英

mysql查询很慢,关于如何优化有何建议?

[英]mysql Query very slow, any recommendation on how to optimize?

我最近已经通过godaddy迁移到了带有Plex CPanel的专用Windows托管。 我已经设置了我的网站和数据库(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秒。)

在网站首页上执行该操作已经很长时间了。

关于如何优化这一点的任何建议? 还是服务器真的很慢?

快照表有超过45,000行。

EXPLAIN输出: 在此处输入图片说明

疯狂的发现! 在共享主机和同一数据库和表的专用主机之间比较ROWS和SIZE时。

共享:1,023,459条记录@ 1.8GiB专用:43,916条记录@ 4.5GiB

为什么会有差异?

您将函数date()应用于每一行,这非常昂贵。

而是,以不需要任何转换功能的方式进行比较,如下所示:

WHERE a.date_sent between '2014/11/10 00:00:00' and '2014/11/10 23:59:59'

并确保在该列和联接表的外键列上定义了一个索引。

谢谢...似乎性能问题不是查询...我已根据上述建议对查询进行了优化,但未见太大改进。

从那以后,我搬到了另一个托管服务处,并注意到了巨大的进步。

查询的问题在于,由于DATE()函数是查询的where部分的一部分,因此数据库优化器很难应用其优化策略(例如索引)。 但是,如果重复完全不重复查询,则良好的数据库引擎可能能够提高速度。

除了将日期和时间分别保存到不同数据库列中的一般设计建议(这可能是更好的处理方式)之外,此答案中还提供了一个想法https://stackoverflow.com/a/95256/3911010如何避免查询中DATE的低效使用。

一些东西

使您的表匹配。 一个使用一个大整数。 另一个int。 使用相同

第二个删除日期函数并与yyyy-mm-dd比较

索引快照。 Brand_I'd专栏可以帮助加入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM