我正在使用現有的Oracle數據庫(我沒有構建,並且對其表結構超出瞭解一無所知)。有些查詢速度很快,其他看起來非常相似的查詢速度非常慢。例如瞭解SQL查詢時間
SELECT a.price, c.banner_id, c.short_name
FROM ret_price_current a
JOIN ret_store b ON a.store_id = b.store_id
JOIN ret_banner c ON b.banner_id = c.banner_id
JOIN ret_store2cbsa_csa d ON a.store_id = d.store_id
WHERE rownum<3
(1.09, 74, 'Safeway')
(1.09, 74, 'Safeway')
that took 0.243073940277 seconds
,但如果我添加了一個看似簡單的WHERE條件:
SELECT a.price, c.banner_id, c.short_name
FROM ret_price_current a
JOIN ret_store b ON a.store_id = b.store_id
JOIN ret_banner c ON b.banner_id = c.banner_id
JOIN ret_store2cbsa_csa d ON a.store_id = d.store_id
WHERE c.banner_id = 74
AND rownum<3
已經運行沒有回來,現在許多分鐘。到底是怎麼回事? (作爲參考,ret_price_current有300m條目,其他條目要小得多。)我想它與索引有關 - 有人可以指點我一本關於數據庫算法的書(比如查詢實際上在後端如何工作),所以我可以理解wtf正在進行?
您可能需要banner_id上的索引或banner_id和rownum上的索引。 rownum場有什麼桌子? –
rownum只是告訴oracle只返回前n行 – andyInCambridge
我看不到任何c.banner_id = 74會比第三次連接慢的原因。 b.banner_id = 74會發生什麼? –