2016-05-02 5 views
0

1秒以内に結果を返すクエリを使用しています。私はこのクエリでは第三のテーブルを追加する場合クエリで3番目のテーブルを追加すると結果時間が遅くなります

クエリがあり、

SELECT creator.first_name, image.id, image.image_code, image.project, image.location, image.image_date, image.image_view, image.copyright 
FROM img_images image, img_creator creator 
WHERE creator.image_id = image.id AND (
(image.image_code LIKE '%text%') 
OR (image.project LIKE '%text%') 
OR (image.location LIKE '%text%') 
OR (creator.first_name LIKE '%text%')) 
ORDER BY creator.first_name 

は今、それは結果を出すために約20〜30秒かかります。

クエリ、私はすぐに応答を与えるために、このクエリを最適化するにはどうすればよい

SELECT creator.first_name, image.id, image.image_code, image.project, image.location, image.image_date, image.image_view, image.copyright, sources.author 
FROM img_images image, img_creator creator, img_source sources 
WHERE creator.image_id = image.id AND sources.image_id = image.id AND (
(image.image_code LIKE '%text%') 
OR (image.project LIKE '%text%') 
OR (image.location LIKE '%text%') 
OR (creator.first_name LIKE '%text%')) 
ORDER BY creator.first_name 

? すべての表に適切な索引付けがあります。結果セットの行数が少ないことが期待されているとき、また

SELECT creator.first_name, image.id, image.image_code, image.project, image.location, 
     image.image_date, image.image_view, image.copyright, sources.author 
FROM img_images image 
JOIN img_creator creator ON (creator.image_id = image.id OR creator.first_name LIKE '%text%') 
LEFT JOIN img_source sources ON (sources.image_id = image.id) 
WHERE image.image_code LIKE '%text%' OR image.project LIKE '%text%' OR image.location LIKE '%text%' 
ORDER BY creator.first_name; 

、しかし:たまに左を強制

+0

テーブル、サンプルデータと出力をしてください説明:クエリは、私は価値があるしようとして個々の単一の値の検索を見つけ、複雑であり、および/または大きなテーブルを必要とします。私はあなたがすでにそれを持っているのを見る – e4c5

答えて

0

は、RDBMSがより良いプランを選択することができます何のフィルタリング条件が設定されていないテーブルに参加します他に、これは近い票を誘致するための良い候補である、

SELECT creator.first_name, image.id, image.image_code, image.project, image.location, 
     image.image_date, image.image_view, image.copyright 
     (SELECT author FROM img_source WHERE image_id = image.id) AS author 
FROM img_images image 
JOIN img_creator creator ON (creator.image_id = image.id OR creator.first_name LIKE '%text%') 
WHERE image.image_code LIKE '%text%' OR image.project LIKE '%text%' OR image.location LIKE '%text%' 
ORDER BY creator.first_name; 
関連する問題