2016-10-05 17 views
0

Employee(Name、Age、Gender)テーブルがあり、行数が10000を超えているとします。名前に「ニックネーム」があり、年齢が18歳から24歳までの従業員を探したいと思います。結果を検索する方法は2つあります。 1つは、名前に「ニックネーム」が含まれているすべての従業員を検索し、メモリ内でフィルタリングを実行するクエリを実行することです。もう1つは、正確なクエリを実行して最終結果を得ることです。どちらのオプションがより優れているのですか?クエリを実行してメモリ内の結果をフィルタリングするか、正確なクエリを実行します。

答えて

2

ほとんどのパフォーマンスに関する質問では、答えは「あなたのデータとシステム上で実行し、どちらが良いかを確認する」です。

しかし、この場合、答えは明らかです。データベースで作業を行う。それがデータベースの目的です。

あなたは数キロ離れた友人に自転車を貸したいとします。自転車に乗ることができます。これは、データベースでクエリを実行するようなものです。これは、システムを設計された方法で使用しているためです。または、バイクを歩くこともできます。これは、すべてのデータをアプリケーションに戻すようなものであり、不要なオーバーヘッドが発生します。

私は自転車の類推を続けることができました。自転車にはさまざまな地形に役立つ歯車があるように、データベースには索引などの構造があり、照会を高速化できます。自転車に乗らないことで、あなたはそれらの利点を先取りしています。

+0

私は、類推の後半はあなたの自転車を離れて、あなたの友人の家に運んで、歩いて戻って一緒に戻すことができると言っています* –

+0

はい、歯車を分けてそれらを一緒に戻すことは、私が今やっていることによく似ています。そして、この質問をもう少し詳しく調べて、基本的なクエリがあり、私が頻繁に使用するデータのコレクションを返すと、このコレクションをさまざまな条件で頻繁にフィルタリングして使用するとします。この場合、単一のクエリを実行してフィルタリングするよりも、正確なクエリの多くをまだ実行していますか?コードの複雑さのような他の観点から? – user1657564

+0

@ user1657564 。 。これは異なるトレードオフのセットです。強力なデータベースは、インデックスを使用したフィルタリングを行うことができます。 *すべての*クエリから返されるデータの総量がテーブルのサイズよりも大幅に大きい場合、データをローカルに格納することは意味をなさないかもしれません。あなたは砂の上に自転車を持っていなければならないと想像してください。 。 。歩くことは状況によっては意味をなさないかもしれません。それは一般的にはお勧めできません。 –

関連する問題