MySQLの初回クエリが遅い理由と改善方法がわかる方がいれば教示いただけますでしょうか。
下記、例に挙げるテーブルとSQLは一例で、他のテーブルでも同じことが発生しているのですが、SQL_NO_CACHEでクエリキャッシュを使わないようにしても、2回目以降が劇的に早くなります。
同じテーブルの照会でも検索条件(WHERE句)を変えると、また初回は遅くなり、2回目以降は早くなるという具合ですが、WHEREの内容は毎回変わり、初回が0.1sec程度のテーブルなら気にならないのですが、データが多くなるなどで1~2sec以上かかってくると問題がでてきて、どうにか初回から早くしたい、というのが要件なのですが、どのように対応したらよいのでしょうか。
<tagテーブル>
tag_id int
tag varchar(32)
<tagmapテーブル>
id int
tag_id int
のようなテーブルを作って、idに対してタグ付けを行おうとしています。
tagテーブル:100万レコード
tagmapテーブル:10億レコード
でテストデータを作成して、下記SQLを発行してみます。
#'タグ10001'の1回目
SELECT SQL_NO_CACHE id
FROM tagmap tm, tag t
WHERE tm.tag_id = t.tag_id
AND t.tag ='タグ10001';
10000 rows in set (1.79 sec)
#'タグ10001'の2回目
SELECT SQL_NO_CACHE id
FROM tagmap tm, tag t
WHERE tm.tag_id = t.tag_id
AND t.tag ='タグ10001';
10000 rows in set (0.01 sec)
#'タグ50001'の1回目
SELECT SQL_NO_CACHE id
FROM tagmap tm, tag t
WHERE tm.tag_id = t.tag_id
AND t.tag ='タグ50001';
10000 rows in set (1.63 sec)
#'タグ50001'の2回目
SELECT SQL_NO_CACHE id
FROM tagmap tm, tag t
WHERE tm.tag_id = t.tag_id
AND t.tag ='タグ50001';
10000 rows in set (0.01 sec)
のような状況です。
MySQLは5.6です。
物理的なデータファイルも同じものを参照しているはずなので、ディスクのキャッシュなどでもないかと考えているのですが、(再起動後などに)事前に何かクエリを発行してキャッシュを持ったり、バージョンアップなども含めて解決ができればと考えています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/11 01:24
2019/02/11 01:30
2019/02/11 02:08
2019/02/11 02:20 編集