2011-10-24 17 views
0

私のiPhoneアプリケーションでは以下のクエリに問題があります。アプリケーションがクエリを実行すると、結果を処理するのにかなりの時間がかかります。多分1秒程度かかります...とにかくクエリを最適化できるかどうか疑問に思っていましたか?私はすべての私のSQLを処理するためにFMDBフレームワークを使用しています。私のSQLクエリの実行が遅くなり、最適化する必要があります

select pd.discounttypeid, pd.productdiscountid, pd.quantity, pd.value, p.name, p.price, pi.path 
from productdeals as pd, product as p, productimages as pi 
where pd.productid = 53252 
and pd.discounttypeid == 8769 
and pd.productdiscountid = p.parentproductid 
and pd.productdiscountid = pi.productid 
and pi.type = 362 
order by pd.id 
limit 1 

私の文は、テーブルについては、以下のとおりです。

CREATE TABLE "ProductImages" (
    "ProductID" INTEGER, 
    "Type" INTEGER, 
    "Path" TEXT 
) 

CREATE TABLE "Product" (
    "ProductID" INTEGER PRIMARY KEY, 
    "ParentProductID" INTEGER, 
    "levelType" INTEGER, 
    "SKU" TEXT, 
    "Name" TEXT, 
    "BrandID" INTEGER, 
    "Option1" INTEGER, 
    "Option2" INTEGER, 
    "Option3" INTEGER, 
    "Option4" INTEGER, 
    "Option5" INTEGER, 
    "Price" NUMERIC, 
    "RRP" NUMERIC, 
    "averageRating" INTEGER, 
    "publishedDate" DateTime, 
    "salesLastWeek" INTEGER 
) 

CREATE TABLE "ProductDeals" (
    "ID" INTEGER, 
    "ProductID" INTEGER, 
    "DiscountTypeID" INTEGER, 
    "ProductDiscountID" INTEGER, 
    "Quantity" INTEGER, 
    "Value" INTEGER 
) 

答えて

1

あなたは適切な製品の契約を見つけるために、外部キー列(productimages.productidとproduct.parentproductid)上のインデックス、およびあなたが使用する列を持っていますか(productdeals.productidとproductdeals.discounttypeid)?そうでない場合は、パフォーマンスが低下する原因になる可能性があります。

あなたは、このようにそれらを作成することができます。

CREATE INDEX idx_images_productid ON productimages(productid); 
CREATE INDEX idx_products_parentid ON products(parentproductid); 
CREATE INDEX idx_deals ON productdeals(productid, discounttypeid); 
+0

こんにちはsocha23は、私は、製品とproductimagesテーブルのための私の文を追加しました。テーブルに外部キーを追加するために必要なことを私に見せてもらえますか? – Peter

+0

インデックスを作成するSQL文で自分の答えを更新し、試してみて問題が解決するかどうか確認してください – socha23

+0

これはうまくいくようです。私は確かめるために別のクエリを試し続けます。それは私のクエリに基づいて必要なすべてのインデックスですか、私もproductdealsスキーマを追加しましたか?私は索引付けを読む必要があります! – Peter

0

以下のクエリ、さらにクエリを固定するために、インデックスを正しくフィールドを作成しようと、実行時間を短縮するためにあなたを助けることができます。

select pd.discounttypeid, pd.productdiscountid, pd.quantity, pd.value, p.name, 
    p.price, pi.path from productdeals pd join product p on pd.productdiscountid = 
    p.parentproductid join productimages pi on pd.productdiscountid = pi.productid where 
    pd.productid = 53252 and pd.discounttypeid = 8769 and pi.type = 362 order by pd.id 
    limit 1 

おかげ

関連する問題