当我尝试按顺序查询时,它的工作速度非常慢。这需要20-30秒。没有订单约1秒。 Mysql版本5.5
SELECT distinct(product.id),
product.position,
product.condition,
product.city_id,
product.price,
product.company_name,
product.timestamp_update,
product.company_id,
company.company_type,
company.image as company_image,
city.name as city_name
FROM `product_to_tag` `v2t`
JOIN `product` ON product.id = v2t.product_id
JOIN `product_to_city` `vtc` ON product.id = vtc.product_id
JOIN `city` `c` ON c.id = vtc.city_id
LEFT JOIN `city` `city` ON city.id=product.city_id
LEFT JOIN `company` ON company.id=product.company_id
WHERE ((`product`.`publish` = 1)) AND (product.id != 5016460) AND (c.id = 99 or c.parent_id = 99) AND ((`v2t`.`tag_id` IN (65, 181, 228, 1135)))
ORDER BY `product`.`timestamp_update` DESC LIMIT 30;
答案 0 :(得分:0)
您的订单上是否有任何索引?
最有可能的原因是,如果您的查询在此之前不包含订单,它将按照找到的顺序返回数据。这显然是最快的选择。然而,当您包含order by子句时,数据库必须按正确的顺序构建行列表,然后按该顺序返回数据。
这显然在数据库上耗费时间,而且很可能为什么需要更长时间。如果您在有序列上有索引,则只有其他建议是查看您加入表的顺序,例如首先加入最小表。