2017-01-24 7 views
0

パフォーマンスの優位性が1以上あるかどうかを確認したいと思います。ここで1つのSQLを使用して複数のレコードまたは複数のSQLを取得して個別のレコードを取得する

は一例です:?

select * from table_a where from=1 
select * from table_a where from=2 
select * from table_a where from=3 
. 
. 
select * from table_a where from=10000 

一方が他方をアウトパフォームしますシナリオはどのようなものに比べて

// suppose I want to retrieve 10000 different records 
select * 
from table_a 
where from in (1,2,3,4,5,6 .... 10000) 

// alternatively 
select * 
from table_a 
where from=1 or from=2 or from=3 ... from=10000 

ここではWHERE節は簡略化されていますが、AND節とOR節がネストされている可能性があります。

+1

あなたが示したように、単一のSQL文を使用するとパフォーマンスが向上するはずです。 <= 10000(可能な場合)からwh​​ere句を単純化することもできます。 – Shiping

+0

@Shiping、yap私の例は単純化されていますが、複数の節を持つ人はどうですか?私は簡単にするために連続番号を使用しています。実際のSQLには連続していない乱数があります。 – Mox

+0

一般的に言えば、IOアクセスが少なく、パフォーマンスが優れています。もちろん、常に例外があります。 – Shiping

答えて

1

単純な例以外にも多くの要因があります。

例がシンプルで、1つのフィールドに対して1つのクエリが1000よりも優れています。 主な要因は、ネットワークI/O操作、物理的および/または論理的な読み取りです。 などです。

しかし、特にジョインがある場合は、より多くの条件がある場合、それは何が良いか疑問に思うかもしれません。 そして、それは実際のDBテーブル、関係、インデックスデザイン、ジョインのタイプ、テーブルのサイズ、(そのような)サイズに依存します... ほとんどの場合、一般的な方向として、SQLが優れていますが、それよりも。
すべては非常に慎重なデータベース設計から始まります。そこに間違い(かなり頻繁に起こる)、後で多くの費用がかかる。 データベースがひどく設計されていると、通常1000クエリが向上します。

+0

実際のシナリオは4から5のテーブルで複数の結合で構成され、4から5の句が含まれている可能性があります。 – Mox

+0

次に、それらの結合の性質に依存します。正規化された結合(1対多の主キーへの外部キー)の場合は、外部キー列のインデックスと、Where節に関連するフィールドのインデックス例の 'from'カラム(BTWはカラムの良い名前ではありません)。しかし、1つの表の索引の数は均衡していなければなりません。それらの多くがCRUD操作のパフォーマンスに影響を与える可能性があります。物理的に各インデックスは別のテーブルです。とても幸運! – Vadim

関連する問題