2

60万件のレコードを持つ複数のテーブルからデータをフェッチしています。しかし、それを取得するのに非常に多くの時間がかかります。取得にかかる時間を短縮する方法を教えてください。私もLIMITケースを使用しましたが、それでも改善はありません。

私の質問は:

SELECT DISTINCT 
tf_history.thefind_id, 
tf_product.product_id, 
tf_product.`name`, 
tf_product.product_url, 
tf_product.image_tpm, 
tf_product.image_thefind, 
tf_product.image_accuracy, 
(SELECT MIN(tf_h.price)
 FROM tf_history AS tf_h
 WHERE tf_h.thefind_id = tf_history.thefind_id) as price, 
oc_product.price AS priceTPM
FROM tf_product
LEFT JOIN tf_history ON tf_product.product_id = tf_history.product_id 
                     AND tf_product.thefind_id = tf_history.thefind_id
LEFT JOIN oc_product ON tf_product.product_id = oc_product.product_id 
WHERE  tf_product.product_id = @product_id

私のテーブル:

tf_history

history_id  int(11) NO  PRI     auto_increment
thefind_id  int(11) NO          
product_id  int(11) NO          
price   decimal(15,4)   NO          
date    datetime    NO          

AND
tf_product

thefind_id  int(11) NO  PRI     auto_increment
product_id  int(11) NO          
name    varchar(255)    NO          
store_id    int(11) NO          
product_url varchar(255)    NO          
image_tpm   varchar(255)    NO          
image_thefind   varchar(255)    NO          
image_accuracy  int(3)  NO          
date    datetime    NO

しかし、私がこのクエリを使用するとき:

SELECT * from tf_history

0.641秒で結果が得られましたが、何が問題になる可能性がありますか?レコードが少なくなると、最初のクエリはスムーズに実行されました。

4

3 に答える 3

1

インデックスを使用して、最終的に結果を得ました

于 2012-12-17T09:49:04.727 に答える
0

インデックスを使用すると、問題が解決します。

于 2012-12-30T18:02:07.423 に答える
0

副選択列を結合に移動します

SELECT DISTINCT 
th.thefind_id, 
tp.product_id, 
tp.`name`, 
tp.product_url, 
tp.image_tpm, 
tp.image_thefind, 
tp.image_accuracy, 
th.price, 
op.price AS priceTPM
FROM tf_product tp
LEFT JOIN (SELECT thefind_id, product_id, MIN(price) as price
           FROM tf_history
           group by thefind_id, product_id) th ON tp.product_id = th.product_id
                                               AND tp.thefind_id = th.thefind_id
LEFT JOIN oc_product op ON tp.product_id = op.product_id 
WHERE  tp.product_id = @product_id
于 2012-12-04T08:47:27.207 に答える