2

私は既存の 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が起こっていることを理解できますか?

4

1 に答える 1