私は2つのテーブルがあります。 1つは、typeDBと呼ばれ、インデックス、タイプ名、およびこのタイプの他のテーブルの要素のIDのリストで構成される行があります。第二のテーブルから行を取得するには - dataDBそれを呼び出すことができます - タイプ0のは、私は、基本的に(ずさんな擬似コードで)行うことができます:どのMySQLクエリがより高速に取得できますか?
$list = SELECT list FROM typeDB WHERE index=0
をそして私が使用してdataDBから行を取得できます。
$array = explode($list)
for (every element of list $i)
$results = SELECT * FROM dataDB WHERE index=$array[$i]
だから私の質問は...ですこれは任意の高速化だけでdataDBタイプフィールドを持つ、次に行うよりです:
$results = SELECT * FROM dataDB WHERE type=$type
私の考えはベックということでした最初の方法は、データベース全体を通過する必要はありませんでしたが、それは速くなるでしょう。しかし、私は実際にどのようにデータベースクエリが動作するのか分かりません。どちらの方法で最も効率的だと思いますか?ありがとう。
これは、いくつの種類があるかによって異なります。 100個のデータタプルに対して5つの型を取得した場合、インデックスは20%未満の選択性しか持たないため、インデックスは使用されません。しかし私はあなたの答えに同意します。 2番目のバージョンを使用し、typeDBテーブルに参加してください。 – Basti
'datatType ON'指定の中に' dataDB.type = "$ type" 'を含めて、結合された行を制限するという点で、私は1つの変更を行います。現在、' dataType' 'dataType'のサブセットのみが要求された場合でも、' dataDB'に出力します。小さなテーブルの場合は考慮しませんが、テーブルが成長する場合は良い方法です。 –
hmm面白いキャッチ。私は、ON節とWHERE節の間に余分な条件を置くことの違いが何であるかは分かりませんでした。 –