以下のように 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 万行あります。
皆さんありがとう、
アルマンド・ミアニ