0

誰かが以下のクエリを改善するためのアドバイスを提供できれば、これは最も役に立ちます。多くの場合、テーブルを分離するために左結合を2回実行した場合に、どのように改善できるかわかりません。たとえば、ユーザーテーブルに左結合された場所と、画像ギャラリーテーブルに左結合された場所があります。この観点からSQLを最適化できるかどうかはわかりませんでした。現時点では非常に遅いです。すべての列がすべての結合とwhereステートメントでインデックス付けされていることを確認しました。

SELECT im.alias_title, im.title,im.guid_id, im.description, im.hits, im.show_comment, im.can_print,
 im.can_download, im.can_share, im.created_on, im.date_taken, im.approved, im.visible,
ad.address_line_1, ad.address_line_2, ad.town_village_city, ad.state_province_county, ad.postal_code, ad.other_address_detail, co.country,
geo.latitude, geo.longitude, geo.zoom, geo.yaw, geo.pitch,
c.make, c.model,
us.first_name, us.surname, uf.user_id, uf.real_name, uf.user_name, uf.gender, uf.description, uf.description, uf.buddy_icon_url, uf.first_taken_date, uf.first_date,
uf.time_zone_label, uf.time_zone_offset,
adf.address_line_1 as user_address_line_1, adf.address_line_2 as user_address_line_2, adf.town_village_city as user_town_village_city, adf.state_province_county as user_state_province_county, 
adf.postal_code as user_postal_code, adf.other_address_detail as user_other_address_detail, cof.country as user_country,
geof.latitude as user_geolocation_latitude, geof.longitude as user_geolocation_longitude, geof.zoom as user_geolocation_zoom, geof.yaw as user_geolocation_yaw, geof.pitch as user_geolocation_pitch,
im.alias_title = in_image_alias_title AS image_selected -- image selected
FROM image im
LEFT JOIN address ad ON im.address_id = ad.id
LEFT JOIN country co ON ad.country_id = co.id
LEFT JOIN geolocation geo ON im.geolocation_id = geo.id
LEFT JOIN camera c ON im.camera_id = c.id
INNER JOIN user us ON im.user_id = us.id
LEFT JOIN user_flickr uf ON us.id = uf.id
LEFT JOIN address adf ON uf.address_id =adf.id
LEFT JOIN country cof ON ad.country_id = cof.id
LEFT JOIN geolocation geof ON uf.geolocation_id = geof.id
WHERE (im.alias_title = in_image_alias_title OR im.user_id = user_id)
AND im.approved = in_image_approved 
AND im.visible = in_image_visible
AND (im.advertise_to <= NOW() OR im.advertise_to IS NULL)
ORDER BY image_selected DESC;

ここに画像の説明を入力してください

4

1 に答える 1

0

ディスカッション/チャットルームの後、そしてあなたがやろうとしていたことの詳細を学びました...

where句に関連付けられたコンポーネントに複合インデックスを作成して、最初の主要な要素の最良のものだけでなく、すべての部分を適用できるようにします。また、where句から「alias_title」を削除することで(最初にエイリアスタイトルに基づいてユーザーIDを取得していたため)、クエリでより多くの考慮を払う冗長な句でした。

(user_id、approved、visible、a​​dvertise_to)にインデックスを付けます

結果は戻ってきて、物事のスキームでは小さいので、最終的な「orderby」句は最終的なソート出力に問題はありません。

于 2013-01-09T17:32:30.080 に答える