3

以下のように EXPLAIN で適切な計画を立てて、遅いクエリを実行するにはどうすればよいでしょうか。行数が少なく、インデックスを使用し、ファイルソートはありません。

クエリは 9 秒で実行されます。メイン テーブルには約 50 万行あります。

そのテーブルに 25 万行あると、クエリは 1 秒未満で実行されました。

提案をお願いします?

説明

クエリ (1. コメント化されたフィールドは、ユーザーの選択に従って有効にできます。2. FORCE INDEX を使用しないと、14 秒になりました。3. SQL_NO_CACHE を使用して、誤った結果を防止します):

    SELECT SQL_NO_CACHE
          p.property_id
        , lct.loc_city_name_pt
        , lc.loc_community_name_pt
        , lc.loc_community_image_num_default
        , lc.loc_community_gmap_longitude
        , lc.loc_community_gmap_latitude
    FROM property as p FORCE INDEX (ix_order_by_perf)
    INNER JOIN loc_community lc 
        ON lc.loc_community_id = p.property_loc_community_id
    INNER JOIN loc_city lct FORCE INDEX (loc_city_id)
        ON lct.loc_city_id = lc.loc_community_loc_city_id
    INNER JOIN property_attribute pa
        ON pa.property_attribute_property_id = p.property_id        
    WHERE p.property_published = 1
        AND (p.property_property_type_id = '1' AND p.property_property_type_sale_id = '1') 
        AND p.property_property_housing_id = '1' 
--      AND p.property_loc_community_id = '36'  
--      AND p.property_bedroom_id = '2'
--      AND p.property_price >= '50000' AND p.property_price <= '150000'
--      AND lct.loc_city_id = '1'
--      AND p.property_loc_subcommunity_id IN(7,8,12) 
    ORDER BY 
          p.property_featured DESC
        , p.property_ranking_date DESC
        , p.property_ranking_total DESC
    LIMIT 0, 15

クエリ プロファイル

クエリ プロファイル

結果セットは常に 15 行を出力します。ただし、テーブル プロパティと property_attribute には約 50 万行あります。

皆さんありがとう、

アルマンド・ミアニ

4

4 に答える 4

1

特定のニーズに対して有効でなくなった可能性のあるモデルを中心にクエリが最適化される瞬間があります。

計画は素晴らしいかもしれませんが、where 句で使用しているフィルターがインデックスの定義を尊重しているとしても、パーサーが多くの行を解析しないという意味ではありません。

分析する必要があるのは、インデックスがどのように決定されるかです。たとえば、「人」テーブルに「名前、苗字」のインデックスがある場合、全員が同じ名前、苗字だとパフォーマンスが低下します。インデックスは、データセットの特定のセグメントを十分に説明できない場合、パフォーマンスを低下させる本当のトラップです。

于 2012-05-16T14:23:42.880 に答える
0

良い計画を除いて、クエリを実行するのに十分なリソースが必要です。

構成内のバッファーサイズと別の重要なパラメーターを確認してください。

そして、あなたの質問は?

于 2012-05-16T14:19:17.487 に答える