これは私の質問です:
SELECT B.RECORDID, A.ITEMCODE, A.ITEMNAME, A.STOCKINHAND, B.SALEPRICE
FROM ITEMMASTER A, STOCKENTRY B
WHERE A.ITEMID = B.ITEMID
AND RECORDID = (SELECT MAX(RECORDID) FROM STOCKENTRY
WHERE ITEMID = A.ITEMID)
AND A.STOCKINHAND > 0
AND B.SALEPRICE > 0
AND B.INVOICEDATE IS NOT NULL
ORDER BY A.ITEMNAME, B.INVOICEDATE;
テーブルB(StockEntry)には1つ以上のレコードが含まれる場合がありますが、テーブルA(ItemMaster)にはそのItemIDの行が1つしかないことは間違いありません。
WHERE句のサブクエリを削除すると、1つ以上の行が表示されます。WHERE句のサブクエリでmax(RecordID)を選択すると、クエリが遅くなるように感じます。RecordID、InvoiceDate、ItemIDにインデックスがありますが、それでもMySQLログはこのクエリがうまく機能していないことを示しています。なんらかの理由で列の順序を変更できません。
このクエリを最適化するためのより良い方法はありますか?