>  Q&A  >  본문

그룹화 속도를 향상시키는 방법

<p>행이 30억 개가 넘는 큰 테이블이 있는데 이제 쿼리를 실행하는 데 3일이 걸립니다. </p> <p>내 쿼리는 다음과 같습니다.</p> <pre class="brush:php;toolbar:false;">주파수 단어(단어, 빈도, 파일 이름)에 삽입 단어 선택, 빈도(*), 최대값(파일 이름) allwordstemp에서 단어별로 그룹화</pre> <p>기본적으로 내 쿼리는 allwordstemp 테이블에서 단어별로 그룹화하는 것이며 빈도가 1일 때 <strong>filename</strong>을 알고 싶습니다. 그래서 max(filename)을 추가했습니다. max와 같은 집계 함수에 포함됩니다. 빈도가 1보다 크면 filename 값도 필요하지 않습니다. 두 테이블 모두 단어와 파일 이름에 대해 2개의 인덱스를 가지고 있습니다. </p> <p>allwordstemp 테이블(파일 이름은 id 파일입니다): </p> <pre class="brush:php;toolbar:false;">CREATE TABLE `allwordstemp`( `단어` varchar(45) DEFAULT NULL, `파일 이름` int(11) DEFAULT NULL, KEY `idx_allwordstemp_word`(`단어`), KEY `idx_allwordstemp_filename` (`파일 이름`) ) 엔진=InnoDB DEFAULT CHARSET=utf8;</pre> <p>주파수단어 테이블:</p> <pre class="brush:php;toolbar:false;">CREATE TABLE `주파수 단어`( `단어` varchar(45) DEFAULT NULL, `주파수` int(11) DEFAULT NULL, `파일 이름` int(11) DEFAULT NULL, KEY `idx_주파수단어_단어`(`단어`), KEY `idx_주파수단어_주파수`(`주파수`), KEY `idx_주파수단어_파일 이름`(`파일 이름`) ) 엔진=InnoDB DEFAULT CHARSET=utf8;</pre> <p>선택 설명:</p> <pre class="brush:php;toolbar:false;">+----+---------------+--------------- -+---+---------+---------------+------- ---- ------------+---------+------+------------+--- ---- ---+-------------+ | ID | 선택 가능 | 키 | 필터링 | +------+---------------+------------+--------------- -+-- ----+---------------+---------+-- -- -----+------+------------+----------+------------ -- + | 1 | 단순 | allwordstemp | idx_allwordstemp_word | +------+---------------+------------+--------------- -+-- ----+---------------+---------+-- -- -----+------+------------+----------+------------ -- +</pre> <p>검색어를 더 빠르게 만들려면 어떻게 해야 합니까? </p>
P粉155832941P粉155832941431일 전517

모든 응답(1)나는 대답할 것이다

  • P粉741678385

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

    필터가 단어나 파일 이름이 아닌 빈도를 기반으로 하는 것 같습니다. 그래서 먼저 모든 단어를 빈도별로 색인화하겠습니다.

    그런 다음 빈도가 정수라고 가정하면 다음과 같이 WHERE 절을 추가합니다.

    으아악

    위 내용은 다양한 파일 이름에서 한 번만 나타나는 모든 단어 목록을 제공합니다.

    이 정보가 도움이 되기를 바라며 최선을 다하겠습니다!

    회신하다
    0
  • 취소회신하다