我的网站在访问高峰期间有严重问题。在做了很多故障排除之后,我发现问题在于数据库。第一次运行需要很长时间的查询
我有这个主要的查询运行索引检索数据表。
在繁忙的一天,该网站首次加载需要30到45秒的时间,但每次加载后都会非常快速地加载大约5分钟,然后再次减速并最终导致网站因过多加载。
我直接在数据库上测试了这个查询,它的执行完全一样。
这是更多的与查询或MySQL配置?
它工作得很好,返回的结果很小,但在繁忙的一天,当列表非常大时,它真的会减慢并杀死网站。
编辑:
谢谢你的所有建议。
我稍微修改了查询,并对数据库做了一些修改,因为某些名称不合理。
经过您的所有建议后,我还修改了查询以删除通配符搜索,并且还删除了对不再需要的表的一些冗余请求。
这里是查询本身:
SELECT g.id, g.`name`, g.scores, g.sportFK, g.`desc`, g.`date`, s.id AS streamid
FROM games AS g
LEFT JOIN streams AS s ON s.gameFK = g.id
WHERE
(g.date >= '" . $date . "' AND g.date <= '" . $newdate . "')
AND g.sportFK IN (" . $sportfk . ")
ORDER BY g.date ASC"
测试之后查询的首场演出仍然以33S运行,并且每一个后续执行是在0.04秒运行的sugegsts该网站上的效果会高峰时间到来时也是如此。
我也准备了从EXPLAIN
请求的信息。
这是 '游戏' 表
GAMES TABLE:
SIZE: 6MB
ROWS: 14841
TYPE: INNODB
这是 'STREAMS' 表
STREAMS TABLE:
SIZE: 80MB
ROWS: 135296
TYPE: MyISAM
编辑:马丁谢谢你提出一个关于写作的观点。这个数据库也会以相当规则的时间间隔从另一个源进行填充,所以会有不断的READ和WRITE操作。我将不得不对此做更多的研究。
你的桌子上有适当的索引吗?你不需要不要从你的表中获取所有(*)数据? –
为什么当参数不是模式时使用'LIKE'? 'prod_name'或'cat_name'是否可以包含通配符? – Barmar
此查询的可能瓶颈是“LIKE”,“JOIN”和子“SELECT” - 尽量避免它们,如果可能的话 –