그룹화 속도를 향상시키는 방법
<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>