suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So verbessern Sie die Gruppierungsgeschwindigkeit

<p>Ich habe eine große Tabelle mit über 3B Zeilen und die Ausführung meiner Abfrage dauert jetzt 3 Tage. </p> <p>Das ist meine Anfrage: </p> <pre class="brush:php;toolbar:false;">in Häufigkeitswörter einfügen (Wort, Häufigkeit, Dateiname) Wort auswählen, Anzahl(*) als Häufigkeit, max(Dateiname) von allwordstemp Nach Wort gruppieren</pre> <p>Grundsätzlich besteht meine Abfrage darin, nach Wörtern aus der Tabelle „allwordstemp“ zu gruppieren, und ich möchte den <strong>Dateinamen</strong> wissen, wenn die Häufigkeit = 1 ist. Deshalb habe ich max(Dateiname) hinzugefügt, weil der Dateiname dies tun muss in die Aggregatfunktion eingehen, z. B. max. Wenn die Häufigkeit > 1 ist, benötige ich den Wert von Dateiname auch nicht. Beide Tabellen verfügen über zwei Indizes für Wort und Dateiname. </p> <p>allwordstemp-Tabelle (Dateiname ist eine ID-Datei): </p> <pre class="brush:php;toolbar:false;">CREATE TABLE `allwordstemp` ( `word` varchar(45) DEFAULT NULL, `Dateiname` int(11) DEFAULT NULL, SCHLÜSSEL `idx_allwordstemp_word` (`word`), SCHLÜSSEL `idx_allwordstemp_filename` (`filename`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> <p>Häufigkeitsworttabelle: </p> <pre class="brush:php;toolbar:false;">TABELLE „Frequenzwörter“ ERSTELLEN ( `word` varchar(45) DEFAULT NULL, „Frequenz“ int(11) DEFAULT NULL, `Dateiname` int(11) DEFAULT NULL, SCHLÜSSEL `idx_frequenzwords_word` (`word`), SCHLÜSSEL `idx_frequenzwords_frequenz` („Frequenz“), SCHLÜSSEL `idx_frequenzwörter_dateiname` (`dateiname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre> <p>Auswahl erklären:</p> <pre class="brush:php;toolbar:false;">+----+-------------+------------- -+----------------+-------+---------------+------- ---- ------------+---------+------+------------+--- ---- ---+-------------+ |. id_type |. key_len | +----+-------------+--------------+--------------- -+-- -----+--------------+---------------------+-- -- -----+------+------------+----------+----------- -- + |. 100,00 | +----+-------------+--------------+--------------- -+-- -----+--------------+---------------------+-- -- -----+------+------------+----------+----------- -- +</pre> <p>Wie kann ich meine Abfrage beschleunigen? </p>
P粉155832941P粉155832941447 Tage vor534

Antworte allen(1)Ich werde antworten

  • P粉741678385

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

    您的筛选条件似乎是基于频率,而不是单词或文件名。所以我首先会按频率对所有单词进行索引。

    然后,假设频率是一个整数,我会添加一个WHERE子句,如下所示:

    select word, max(filename)
    from allwordstemp
    where frequency = 1
    group by word

    以上将给您提供一个在各种文件名中仅出现一次的所有单词列表。

    希望这对您有所帮助,祝一切顺利!

    Antwort
    0
  • StornierenAntwort