我正在使用一个现有的 Oracle 数据库(我没有构建它,并且对它的表结构一无所知)。有些查询非常快,而其他看似非常相似的查询却非常慢。例如
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 有大约 3 亿个条目,而其他条目要小得多。)我想这与索引有关——有人可以指点我一本关于数据库算法的书(比如查询实际上是如何在后端工作的)所以我可以理解 wtf 是怎么回事吗?