0
我试图优化这个查询,并且听起来很简单,我很难搞清楚如何加速它。优化MySQL连接表查询(HABTM对象关系)
我有两个对象,一个Widget和一个类别(HABTM关系),具有表“widgets”,“categories”和“categories_widgets”(连接表)。我试图找到特定类别中的所有小部件。简单的权利?虽然有些类别可以有10-50k小部件,我的查询需要1-2秒才能完成(我的网站流量相当高,所以这是完全不可接受的)。
这里是我现在在做什么:
SELECT * FROM `categories`
LEFT JOIN `categories_widgets` ON `categories_widgets`.`category_id`=`categories`.`id`
JOIN `widgets` ON `widgets`.`id`=`categories_widgets`.`widget_id`
ORDER BY `widgets`.`id` DESC
LIMIT 0,10
我需要按ID下降小部件(这是什么杀死速度),我有时可以有体面的高偏移量(不知道任何事情都可以做到)。
任何与此有关的帮助将不胜感激,或者如果您有任何关于表重构的建议,这也是一种可能性(但假设很多类别和很多小部件没有简单的分片方式)。
谢谢!
我确实有索引。我试图从数据库(类别)中提取一些额外的信息......我只是试图省略它,并没有真正影响速度。感谢您的建议!还要别的吗? – Harry