1

MySQLがキャッシュできることを読みましUNION'sたが、同時にそれを読みました。

クエリの開始時にコメント(およびスペース)を避ける–クエリキャッシュは、クエリをキャッシュできるかどうかを確認するために単純な最適化を行います。前述したように、SELECTクエリのみがキャッシュされるため、クエリの最初の文字を調べ、「S」の場合はキャッシュ内のクエリルックアップを続行し、そうでない場合はスキップします。

ソース:http ://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/

そうは言っても、UNIONは括弧で始まるので、どのようにキャッシュされますか?

mysql.comによると:

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

最初の文字は「S」ではないので、スキップされます!?

私はあなたがこのようなことをすることができるのを見ました。

SELECT * FROM (
    (SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
    UNION ALL
    (SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
) AS u

しかし、sub-selectそうなると、そのページによると、キャッシュされません。

では、どのようにしUNIONてキャッシュを取得するのでしょうか。

4

1 に答える 1

2

これは、すべてのクエリを開始文字としてSELECT記述できるためです。'S'

UNION角かっこはクエリから削除でき、次のように変更できるため、このクエリをキャッシュするためにサブクエリを作成する必要はありません。

SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10
UNION
SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10;
于 2012-08-28T12:07:14.150 に答える