さまざまな列でさまざまなクエリのベンチマークを実行しようとしていますが、MySQL では実行できません。クエリを最初に実行した後、そのクエリの実行時間を同じにすることはできません。たとえば、クエリが最初に 0.062 秒で実行された場合、2 回目、3 回目などの実行で同じ実行時間を取得することはできません。0 秒または 0.015 のいずれかになります。
MySQLクエリキャッシュの無効化とクリアに関する多くの投稿を読みましたが、どれも役に立ちませんでした.
私が何をしようとも、MySQL はキャッシュされた結果を使用することを主張しているようです。
MySQL Workbench を再起動してから実行します。
set global query_cache_type=0;
set global query_cache_size=0;
flush query cache;
reset query cache;
実行時間は 0 秒を示し続けます。
変更できなかったサーバー変数は「have_query_cache」だけです。その値は「はい」で、「いいえ」に設定しようとすると、Workbench は読み取り専用であると言います。
私もそうです。
set profiling=1;
run my select query
show profile for query 2;
プロファイリングの結果は次のとおりです。
'starting', '0.000077'
'checking permissions', '0.000007'
'Opening tables', '0.000016'
'init', '0.000035'
'System lock', '0.000009'
'optimizing', '0.000013'
'statistics', '0.000094'
'preparing', '0.000008'
'executing', '0.000002'
'Sending data', '0.000016'
'end', '0.000002'
'query end', '0.000003'
'closing tables', '0.000005'
'freeing items', '0.000139'
'cleaning up', '0.000009'
私が間違っていなければ、これはキャッシュが正しく使用されていないことを示していますか? しかし、私はまだ0秒を見ています。実行時間のために。
編集:私が実行しているクエリは、次のような「SQL_NO_CACHE」を使用した SELECT クエリです。
SELECT SQL_NO_CACHE col1,now() from mytable where col2="some_value"
(クエリのキャッシュを防ぐために now() 関数を追加しました)
Edit2:innoDB、MySQL 5.6.10を使用しています
ここで何が起こっているのかわからないので、誰かが私を助けてくれませんか。
どうもありがとう!