あなただけUNION
の最初のSELECT
にSQL_CALC_FOUND_ROWS
を指定する必要があります。 COUNT(*)
を使用しているときに実際に外側のSELECT
クエリを実行する必要はありません。一例として
は、我々は以下のLIMIT
編クエリを持っているとしましょう:
SELECT * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
私たちは、単に書くことができます。
SELECT SQL_CALC_FOUND_ROWS * FROM my_table1
UNION ALL
SELECT * FROM my_table2
UNION ALL
SELECT * FROM my_table3
LIMIT 0,10;
を私たちは、その後、呼び出し:
SELECT FOUND_ROWS();
このあなたの質問とJのコメントに外側のクエリが記載されているというオーバーヘッドを避けますoe Stefanelliの答え(私はそれが顕著な違いになると全面的には確信していませんが)。
私はそれはあなたがUNION ALL
ではなくUNION
を使用している場合は、このにのみ動作することを再反復する価値があると思う - 重複が削除される前に、行数は、あなたがFOUND_ROWS()
から同じ結果を得ることができますつまり、計算されるためですUNION ALL
を使用した場合のように
解決策は何ですか? –