Swift 결과를 위해 MySQL에서 행 계산 가속화
대형 MySQL 테이블에서 행 계산은 시간이 많이 걸리는 작업일 수 있습니다. 테이블에 수백만 개의 행이 포함된 경우 특히 그렇습니다. 표준 SELECT COUNT(*) 쿼리는 완료하는 데 몇 초가 걸릴 수 있으며 이는 심각한 성능 병목 현상이 될 수 있습니다.
인덱스가 도움이 되지 않는 이유
인덱싱된 열은 종종 쿼리 성능을 향상시킬 수 있습니다. 그러나 행 개수를 계산하는 경우 인덱스가 큰 이점을 제공하지 못할 수 있습니다. 이는 쿼리가 행 수를 결정하기 위해 테이블의 모든 행을 계속 스캔해야 하기 때문입니다.
대체 기술
요약 정보를 캐싱하거나 업데이트하는 것 외에도 다음이 있습니다. 행 계산 쿼리 속도를 높이는 제한된 기술. 한 가지 잠재적인 해결책은 Apache Parquet와 같은 열 기반 스토리지 엔진을 사용하는 것입니다. 열 기반 엔진은 분석 쿼리용으로 설계되었으며 행 계산을 포함한 특정 유형의 쿼리에 대해 더 빠를 수 있습니다. 그러나 열 기반 엔진은 모든 사용 사례에 적합하지 않을 수 있으며 다른 쿼리 유형에는 단점이 있을 수 있습니다.
트리거 기반 요약 테이블
가장 효과적인 방법 행 계산 쿼리 속도를 높이는 것은 요약 테이블을 유지하는 것입니다. 이 요약 테이블은 인덱싱된 열의 가능한 각 값에 대한 행 수를 저장할 수 있습니다. 행이 삽입, 삭제 또는 업데이트되면 트리거는 이에 따라 요약 테이블을 업데이트할 수 있습니다. 이 접근 방식은 테이블 크기에 관계없이 거의 즉각적인 행 개수 쿼리를 제공할 수 있습니다.
다음은 트리거 기반 요약 테이블의 예입니다.
CREATE TABLE books_cnt ( status VARCHAR(255) NOT NULL, total INT NOT NULL ); CREATE TRIGGER ai_books AFTER INSERT ON books FOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERE status = NEW.status; CREATE TRIGGER ad_books AFTER DELETE ON books FOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERE status = OLD.status; CREATE TRIGGER au_books AFTER UPDATE ON books FOR EACH ROW BEGIN IF (OLD.status <> NEW.status) THEN UPDATE books_cnt SET total = total + IF(status = NEW.status, 1, -1) WHERE status IN (OLD.status, NEW.status); END IF; END;
이 트리거 사용 기반 요약 테이블을 사용하면 간단한 쿼리를 사용하여 각 상태 값에 대한 행 수를 검색할 수 있습니다.
SELECT status, total FROM books_cnt;
이 쿼리는 어떤 경우에도 즉시 결과를 반환합니다. 큰 테이블용.
위 내용은 성능 향상을 위해 MySQL에서 행 계산 속도를 어떻게 높일 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!