2017-09-12 10 views
-1

私がそれを使ってクエリを実行しようとすると、非常に遅くなります。それは20〜30秒かかります。注文なしで約1秒。 MySQLのバージョン5.5ORDER BYを使用したときのクエリが遅い

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

元々1秒で実行されているとしたら、データを返す前に1秒かかりますか?それとも、*完了するのに1秒かかりますか? – Phylogenesis

+0

[MYSQL、非常に遅い注文]の可能な複製(https://stackoverflow.com/questions/14368211/mysql-very-slow-order-by) – Phylogenesis

+0

データを返す前に1秒かかる – lolka

答えて

0

あなたの注文にはどのインデックスもありますか?

あなたのクエリに注文が含まれていない場合は、それが見つかった順序でデータが返される可能性が高いためです。これは明らかに最も簡単なオプションです。一方、order by句を組み込む場合、データベースは正しい順序で行のリストを作成し、その順序でデータを返す必要があります。

これは、明らかにデータベースで時間がかかり、おそらく時間がかかります。順序付けされた列にインデックスがある場合、他の提案は、最小のテーブルを最初に結合するなど、テーブルを結合する順序を調べることだけです。

+0

はい、timestamp_updateカラムにインデックスを作成しました。 – lolka

関連する問題