私は2つのテーブルを持っています Invoice(
Id
,
Status
,
VendorId
,
CustomerId
,
OrderDate
,
InvoiceFor
)
InvoiceItem(
Id
,
Status
,
InvoiceId
,
ProductId
,
PackageQty
,
PackagePrice
)
ここでは、invoice.id=invoiceItem.invoiceId (Foregin キー) および Id フィールドは主キー (big int) です。これらのテーブルには、100000 (invoice) および 450000 (invoiceItem) 行が含まれます。
ここで、特定の日付範囲の請求書 = 55 または 66 の請求書の元帳を返すクエリを作成する必要があります。また、その特定の顧客による製品の前回の撮影日を含む最終撮影日を返す必要があります。
出力は、OrderDate、InvoiceId、CustomerId、ProductId、LastTaken、PackageQty、PackagePrice である必要があります。
だから私は次のクエリを書きます
SELECT a.*, (
SELECT MAX(ivv.orderdate)
FROM invoice AS ivv , invoiceItem AS iiv
WHERE ivv.id=iiv.invoiceid
AND iiv.ProductId=a.ProductId AND ivv.CustomerId=a.CustomerId AND ivv.orderDate<a.orderdate
) AS lastTaken FROM (
SELECT iv.Id, iv.OrderDate, iv.CustomerId, iv.InvoiceFor, ii.ProductId,
ii.PackageQty, ii.PackagePrice
FROM invoice AS iv, invoiceitem AS ii
WHERE iv.id=ii.InvoiceId
AND iv.InvoiceFor IN (55,66)
AND iv.Status=0 AND ii.Status=0
AND OrderDate BETWEEN '2011-01-01' AND '2011-12-31'
ORDER BY iv.orderdate, iv.Id ASC
) AS a
しかし、私はいつもタイムアウトを得ました。どうすれば問題を解決できますか???
このクエリの Explain は次のとおりです。