ホームページ  >  に質問  >  本文

グループ化速度を向上させる方法

<p>30 億行を超える大きなテーブルがあり、クエリの実行に 3 日かかります。 </p> <p>これは私のクエリです: </p> <pre class="brush:php;toolbar:false;">フリークエンシーワードに挿入 (単語、頻度、ファイル名) 単語を選択、頻度として count(*)、max(ファイル名) すべてのWordstempから 単語ごとにグループ化</pre> <p>基本的に、私のクエリは allwordstemp テーブルから単語ごとにグループ化することであり、頻度 = 1 のときの <strong>ファイル名</strong> を知りたいので、max(filename) を追加しました。 max などの集計関数に含めることができます。頻度 > 1 の場合、ファイル名の値も必要ありません。 どちらのテーブルにも、単語とファイル名に関する 2 つのインデックスがあります。 </p> <p>allwordstemp テーブル (ファイル名は ID ファイル): </p> <pre class="brush:php;toolbar:false;">CREATE TABLE `allwordstemp` ( `word` varchar(45) デフォルト NULL、 `ファイル名` int(11) デフォルト NULL、 KEY `idx_allwordstemp_word` (`word`)、 KEY `idx_allwordstemp_filename` (`filename`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> <p>頻度単語テーブル:</p> <pre class="brush:php;toolbar:false;">CREATE TABLE `frequencywords` ( `word` varchar(45) デフォルト NULL、 `頻度` int(11) デフォルト NULL、 `ファイル名` int(11) デフォルト NULL、 KEY `idx_frequencywords_word` (`word`)、 KEY `idx_frequencywords_frequency` (`frequency`)、 KEY `idx_frequencywords_filename` (`filename`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> <p>選択内容の説明:</p> <pre class="brush:php;toolbar:false;"> ---- ------------- -------------- -- ---------- ------ --------------- --------------- ----- --------- ------ ------------ ---------- -------- ----- | id | select_type | テーブル | パーティション | タイプ | possible_keys | キー | key_len | ref | 行 | フィルター | 追加 | ---- ------------- -------------- ------------ ------- ---------- ----------------------- ---------- -- -------------------------------------- | 1 | シンプル | allwordstemp | NULL | インデックス | NULL | idx_allwordstemp_word | 138 | NULL | 3487864881 | 100.00 | インデックスの使用 | ---- ------------- -------------- ------------ ------- ---------- ----------------------- ---------- -- - --- ---------------- ---------- ------------- </pre> <p>クエリを高速化するにはどうすればよいですか? </p>
P粉155832941P粉155832941431日前518

全員に返信(1)返信します

  • P粉741678385

    P粉7416783852023-09-06 00:45:26

    フィルタは単語やファイル名ではなく、頻度に基づいているようです。そこで、まずすべての単語を頻度別にインデックス付けします。

    次に、頻度が整数であると仮定して、次のような WHERE 句を追加します。 リーリー

    上記により、さまざまなファイル名に 1 回だけ出現するすべての単語のリストが表示されます。

    これがお役に立てば幸いです。ご多幸をお祈り申し上げます。

    返事
    0
  • キャンセル返事