7

私は次のクエリを持っています

EXPLAIN SELECT COUNT(DISTINCT ip_address) as ip_address, exec_date
    FROM requests
    GROUP BY exec_date;

id  select_type table       type        possible_keys   key         key_len ref      rows   Extra
1   SIMPLE      requests    range       NULL            daily_ips   263     NULL    488213  Using index for group-by (scanning)

カバーインデックス付きdaily_ips

Table       Non_unique  Key_name    Seq_in_index    Column_name Collation   Cardinality Sub_part    Packed  Null    Index_type  Comment Index_comment
requests    1           daily_ips   1               exec_date   A           16          NULL        NULL    YES BTREE       
requests    1           daily_ips   2               ip_address  A           483492      NULL        NULL    YES BTREE       

このクエリをさらに最適化する方法はありますか?

正確にはUsing index for group-by (scanning)どういう意味ですか?ステートメントGROUP BYの一部がそうではないのに、句全体が完全にインデックスから行われることを意味しますか?COUNT(DISTINCT ip_address)

4

2 に答える 2

3

ご提供いただいたデータによると、クエリをさらに最適化する方法はありません。

フォローアップの質問に関して、 group-byのインデックスの使用の出力を説明するMySQLのマニュアルページには次のように書かれています。

Using index table accessメソッドと同様に、using index for group-byは、MySQLが、実際のテーブルへの追加のディスクアクセスなしで、GROUPBYまたはDISTINCTクエリのすべての列を取得するために使用できるインデックスを検出したことを示します。さらに、インデックスは最も効率的な方法で使用されるため、各グループについて、少数のインデックスエントリのみが読み取られます。詳細については、8.13.10項「GROUPBY最適化」</a>を参照してください。

インデックスは、クエリを高速化するのに特に適しています。インデックス付きフィールドのみが選択されているため(クエリの各列もインデックスに表示されます)、関連するすべてのデータがインデックスに表示されるため、MySQLはテーブルにヒットする必要さえありません。

クエリの実行がグーグルで検索を実行するようなものである場合、検索結果で直接探している情報を見つけたので、リンクされたサイトのいずれにもクリックスルーする必要がないことを想像してください-それはスキャンする必要がないもののようなものですテーブルデータはのようなものです。MySQLがインデックスを使用する方法に関する詳細情報は次のとおりです。

場合によっては、データ行を参照せずに値を取得するようにクエリを最適化できます。(クエリに必要なすべての結果を提供するインデックスは、カバーインデックスと呼ばれます。)クエリが数値であり、一部のキーの左端のプレフィックスを形成するテーブルの列のみを使用する場合、選択した値をインデックスから取得できます。より高速なツリー:

SELECT key_part3 FROM tbl_name WHERE key_part1 = 1

于 2012-11-27T18:29:55.297 に答える
0

あなたはObjectifyすることができます:

Objectify ofy = ObjectifyService.begin(); クエリquery=ofy.query(ここにクラスname.class).filter( "テーブルの列名"、クエリする値).list();

その前に、Objectifyのjarファイルを追加する必要があるかもしれません。

于 2012-11-28T03:06:49.050 に答える