「tax_query」の方が「meta_query」よりも高速であることを知っています。
カスタムデータによるフィルタリングが必要な場合は、常にカスタムメタよりも分類法を使用することをお勧めしますが、ここではこの状況に陥っていました。
私はこの明らかな投稿タイプ「プロパティ」がある不動産アプリケーションを作成しています。各施設には、X個の部屋とバスルームがあると想定されています。
次に、私のアプリでは、範囲でプロパティをフィルタリングできます...例:3〜18室のすべてのプロパティを表示します。
カスタムフィールドの方法は、カスタムフィールドを追加することです。例: 'rooms'そして、次のようなクエリを実行します。
$args = array(
'post_type' => 'property',
'meta_query' => array(
'key' => 'rooms',
'value' => array(3,18),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
);
$query = new WP_Query( $args );
分類方法は、たとえば、「property_rooms」というカスタム分類を作成してから、「1」、「2」、「3」などの用語を作成し、用語IDで次のようにクエリを実行します。
$args = array(
'post_type' => 'property',
'tax_query' => array(
'taxonomy' => 'property_rooms',
'terms' => array(3,4,5,6,7,8,9,10,11,12,13,14,15...etc) // Just pretend these are the corresponding term id's
)
);
$query = new WP_Query( $args );
そして、これが質問です:このような状況でも、tax_queryはmeta_queryに勝りますか?
何千もの物件について話している可能性があることを言及することは適切かもしれません。
これらのフィールドによる並べ替えは、クエリの速度をトレードオフするための要件でも考慮事項でもありません。
このような状況でも、tax_queryはmeta_queryに勝りますか?
番号。
分類は、多くの投稿で共有される共通の値のセットがあり、投稿に特定の値があるかどうかに基づいて単純な比較を行う場合に適しています。これらはnotは、例のように数値または範囲の比較を実行する必要がある場合、または値がすべての投稿で一意になる場合に適しています。
不動産サイトで分類すべきものとすべきでないものの例をいくつか示します。
クエリの高速化に加えて、これらのプロパティの分類法を使用すると、バックエンドでのプロパティの管理が容易になり、フィルタリング用のリストの生成がかなり簡単かつ高速になります。
ただし、値をフィルタリングするための唯一の実行可能なオプションがメタである場合でも、メタクエリを使用しすぎると、クエリのパフォーマンスが実際に低下することに注意してください。これは、IDではなくメタのvalueに基づいてクエリを実行しており、値の列にインデックスが付けられていないためです。ただし、インデックス付けされていないからといって、自分でインデックス付けするのが適切であるとは限りません。これは、wp_postmetaのmeta_value列に、さまざまなデータと非常に異なる種類のデータが保持されているためです。
フィルタリングに使用する必要がある数値フィールドが多数ある場合は、ポストメタも分類法も適切ではない可能性があります。独自のインデックスとより適切な列タイプを使用してカスタムテーブルを作成した方がよい場合があります。次に、それらの値をカスタムテーブルに格納し、posts_clauses
、またはposts_join
、posts_where
フィルターを使用して独自のSQLをWP_Queryに追加し、テーブルを使用してより効率的なフィルタリングを行います。
"tax_query beats meta_query" ...とは言えませんが、それらは少し異なります。
Tax_queryを実行する場合、SQLクエリには2つのJOINSが必要です。 Meta_queryの結果、結合は1つだけになります(メタを1つだけ検索する場合)。
では、tax_queryの方が良いのはいつですか。たとえば、複数の分類法に割り当てられた投稿を検索するとします。
2フロア、4ベッドルーム、独立したキッチン、ガレージがある物件を検索するとします。つまり、複数のプロパティに基づいて複数の条件で検索を行っています。
このような場合には:
さらに悪いことに、tax_queryは適切なIDとキーを使用し、meta_queryでは文字列をキーとして使用する必要があります。そうそう-そのような場合、tax_queryはより高速でなければなりません。
しかし...次の場合、Tax_queriesは本当に悪い選択です。
したがって、no-tax_queryがmeta_queryを毎回上回るわけではありません。それらは異なるものであり、必要に応じて使用する必要があります。