MySQL 5.7 と 5.5: 単純なクエリの実行に 50 倍の時間がかかる

MySQL 5.7 と 5.5: 単純なクエリの実行に 50 倍の時間がかかる

私は「algebra」というデータベースを持っており、そこには1,033,990行の「questions」というテーブルがあります。レコードにはINTである「solved」という属性があります。簡単なクエリがあります。

select count(*) from questions where solved = 0

同様の CPU を搭載した 2 台のサーバーがあります。両方のサーバーのテーブルは同じです (データベースは本番環境のレプリカです)。これらは SSD 上にあります。1 台のサーバーには Ubuntu 14.04 と MySQL 5.5.49 がインストールされており、もう 1 台のサーバーには Ubuntu 16.04 と MySQL 5.7.12 がインストールされています。

問題は、このクエリが MySQL 5.5 では 0.009 秒しかかからないのに、MySQL 5.7 では 0.304 秒かかることです。これは 34 倍も遅いのです。

クエリ プランはほぼ同様です。

遅いサーバー:

id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    filtered        Extra
1       SIMPLE  questions       NULL    index   NULL    by_topic_solved 97      NULL    1033990 10.00   Using where; Using index

高速サーバー:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  questions   index   NULL    by_topic_solved 97  NULL    1033989 Using where; Using index

なぜこのようなことが起こるのか、私には理解できません。この新しい 5.7 セットアップでは、他にももっと複雑なパフォーマンスの問題が見られましたが、基礎となるクエリの観点からすると、これが取り組むべき最も単純な問題です。

私はこれについての説明やどこから始めればよいかを探しています。my.cnf は 2 つともほぼ同じでした。ご提案があれば、ぜひお寄せください。

答え1

この問題を完全に理解しました。変更されたのは、新しい MySQL では、query_cache_type = OFF のデフォルト設定によりクエリ キャッシュが無効になっていることです。query_cache_type=1 に設定してクエリ キャッシュを再度有効にすると、パフォーマンスがすぐに向上しました。私のサイトでは INSERT/UPDATE クエリよりも 100 倍多くの SELECT クエリを使用しているため、クエリ キャッシュを使用することは理にかなっています。この方向を見るように指示していただき、ありがとうございます。

関連情報