我使用ORDER BY时查询速度慢

时间:2017-09-12 15:12:59

标签: mysql

当我尝试按顺序查询时,它的工作速度非常慢。这需要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;

1 个答案:

答案 0 :(得分:0)

您的订单上是否有任何索引?

最有可能的原因是,如果您的查询在此之前不包含订单,它将按照找到的顺序返回数据。这显然是最快的选择。然而,当您包含order by子句时,数据库必须按正确的顺序构建行列表,然后按该顺序返回数据。

这显然在数据库上耗费时间,而且很可能为什么需要更长时间。如果您在有序列上有索引,则只有其他建议是查看您加入表的顺序,例如首先加入最小表。