2016-05-20 10 views
0

私は2つのテーブルA(pid、pname、address)、B(bid、baid、pid、details)を持っています。 Aはプライマリキーとしてpidを持ち、BのBidはプライマリキーです。 以下のクエリを実行しました。なぜSQLで結果を返すのに時間がかかります

select * from A a,B b where a.pid=b.pid and b.pid=100. 

しかし、このクエリはデータを与えるために多くの時間を取って、と私は

select * from A a,B b where a.pid=b.pid and a.pid=100. 

以下のように、そのクエリの小さな変化をすればそれは私が速くなり与えます。 私は理由を知りたいのですが、なぜ最初のクエリが時間を要し、2番目のクエリではありません。

+0

bの主キーが入札またはpidですか? –

+0

テーブルにインデックスがありますか?テーブルbではなく?テーブルの行の数は小さいですか? – scaisEdge

+0

質問で述べたように、PIDにプライマリキーがあるので、検索に役立つユニークインデックスが作成されます。一方、Bは入札に関する指標を持っていません(前提)。 –

答えて

0

前述のように、pidはAの主キーです。つまり、一意のインデックスが暗黙的に作成されます。これにより、検索時間が短縮されます。 しかし、Bの場合、pidは主キーではありません。したがって、結果を表示するには時間がかかります。 同様に、b.bidで検索すると、検索時間が短縮されます。

0

私は両方のテーブルがPKとしてPIDを持っていることを理解します。

select * from A a Right outer join B b on a.pid=b.pid where a.pid=100 

これは、クエリの意志として、クエリそれはあなたの第1の例ではない方法を遅くする必要があります。その場合は、最も論理的な説明は、AがBよりもはるかに少ない行は、簡単なテストを行うということですBからすべてのレコードを検索しようとしてください。

関連する問題