мой SQL-запрос работает медленно, нужно оптимизировать - PullRequest
0 голосов
/ 24 октября 2011

У меня проблемы с приведенным ниже запросом для моего приложения для iPhone. Когда приложение запускает запрос, обработка результата занимает довольно много времени, может быть, около секунды или около того ... Мне было интересно, можно ли оптимизировать запрос в любом случае? Я использую инфраструктуру 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
)

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Есть ли у вас индексы для столбцов внешнего ключа (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 голосов
/ 24 октября 2011

Приведенный ниже запрос может помочь вам сократить время выполнения, более того, попробуйте правильно создать индексы для полей, чтобы закрепить ваш запрос.

    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

Спасибо

...