나는 100M 레코드를 포함하는 데이터베이스 테이블이 있습니다. 20 분 동안 실행하는 쿼리가 있습니다. 어떻게 간단하고 빠르게 만들 수 있습니까?MySQL 데이터베이스 거대한 레코드
SELECT newnum,
Sum(Ceil(seconds/60)) AS ttime
FROM astb
GROUP BY newnum
ORDER BY ttime DESC
LIMIT 100;
나는 100M 레코드를 포함하는 데이터베이스 테이블이 있습니다. 20 분 동안 실행하는 쿼리가 있습니다. 어떻게 간단하고 빠르게 만들 수 있습니까?MySQL 데이터베이스 거대한 레코드
SELECT newnum,
Sum(Ceil(seconds/60)) AS ttime
FROM astb
GROUP BY newnum
ORDER BY ttime DESC
LIMIT 100;
ORDER BY
및 인덱스 최고의 LIMIT
작동합니다. 따라서 가능한 경우 열 newnum
에 대한 색인을 가질 수 있습니다.
또 다른 요점은 거대한 테이블의 모든 레코드를 계산하는 것입니다. 이러한 레코드에 대한 계산보다 먼저 임시 테이블에서 레코드를 선택하는 것이 좋습니다.
EDIT 업데이트] SCRIPT : 그것은 큰 데이터베이스 디자인이 아니다
CREATE TEMPORARY TABLE temp AS
(SELECT newnum, SUM(seconds) AS ttime
FROM astb GROUP BY newnum)
SELECT newnum, CEIL(ttime/60) AS ttime
FROM temp
ORDER BY ttime DESC
LIMIT 100;
DROP TABLE temp;
,하지만 당신은 그것을 모두 재 계산하지 않아도 당신은 ceil(seconds/60)
을 유지하기 위해 열을 추가 할 수 있습니다 : 당신은이 같은 임시 테이블을 사용할 수 있습니다 시각?
테이블에 인덱스가 있습니까? – Bridge
해당 쿼리에 GROUP BY가 누락 되었습니까? – Barmar
@Barmar 내 검색어가 업데이트되었습니다. –