1

次の例を考えてみましょう。テーブルitemには 2 つの列がkeyありvalueます。データは次のとおりです。

> SELECT * FROM item;

 key       value
------------------
  1          a
  2          b
  87         c

1 から 100 までのランダムなキーによる SELECT クエリがあり、データセットが大きいとします。私の質問は次のとおりです。

  • InnoDB は何らかの方法で「不足している」キーをキャッシュして、3 や 4 などのキーが存在しないことを認識しますか、それとも毎回ディスクに移動する必要がありますか?

  • 残りのキー値をダミー レコードで埋めると、パフォーマンスが向上しますか?

4

3 に答える 3

0

Innodb は頻繁に使用されるページをメモリに保存するため、すべてのクエリでディスクに移動することはありません。メモリ バッファーのサイズは構成ファイル (通常は my.cnf) で定義され、オプション名は innodb_buffer_pool_size です。Innodb ファイルは、オペレーティング システムによってキャッシュされる場合もあります。

サーバーで使用可能なメモリが大量にある場合は、innodb_buffer_pool_size を適切な値に増やすことを検討してください。これに関する詳細情報: http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

ダミーのレコードを挿入すると、さらに悪化します - テーブルが大きくなります。

于 2012-10-16T07:51:28.023 に答える
0

インデックスには欠落しているレコードへの参照がないため、遅くなることはありません。自動インクリメントを使用して主キー インデックスをレコードに追加し、これをインデックス (pk、キー、値) に追加することを選択できます。

于 2012-10-16T07:07:45.610 に答える
0

The MySQL Query Cacheに記載されているとおり:

クエリ キャッシュSELECTには、クライアントに送信された対応する結果と共に、ステートメントのテキストが格納されます。後で同じステートメントを受信した場合、サーバーはステートメントを再度解析して実行するのではなく、クエリ キャッシュから結果を取得します。

したがって、 のキャッシュはSELECT * FROM item、まったく同じクエリが再度実行された場合にのみ使用されます。このクエリのキャッシュを使用できないなどの別のクエリSELECT * FROM item WHERE key = 3(ただし、まったく同じクエリの後続の呼び出しでは、キャッシュされた独自の結果が使用されます)。

于 2012-10-16T07:01:14.167 に答える