私は既存の 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 には最大 300m のエントリがあり、他はもっと小さいです。) インデックスに関係していると思います。データベース アルゴリズム (バックエンドでクエリが実際にどのように機能するかなど) に関する本を教えてもらえますか? wtfが起こっていることを理解できますか?