0

iPhone アプリの以下のクエリに問題があります。アプリがクエリを実行すると、結果を処理するのにかなりの時間がかかります。おそらく 1 秒ほどかかります...とにかくクエリを最適化できるかどうか疑問に思っていましたか? すべての SQL を処理するために FMDB フレームワークを使用しています。

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
)
4

2 に答える 2

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);
于 2011-10-24T14:05:35.660 に答える