[SQL] MySQL의 카운트 성능
SQLMySQL의 카운트 성능
select count(*) from mytable; select count(table_id) from mytable; //table_id is the primary_key
두 쿼리는 1,000 만 행이 테이블에 느리게 실행되었다. 그 이유 때문에 쉽게 MySQL의 모든 삽입, 업데이트에 업데이트되는 카운터를 유지하고 삭제하지 않을 궁금? 이 쿼리를 개선 할 수있는 방법은 무엇입니까? 나는 설명을 사용하지만 훨씬 도움이되지 않았다.
해결법
-
==============================
1.cherouvim이 코멘트에 지적한 바와 같이,이 스토리지 엔진에 따라 달라집니다.
cherouvim이 코멘트에 지적한 바와 같이,이 스토리지 엔진에 따라 달라집니다.
의 MyISAM은 테이블 행의 수를 계속 수행하고, 정확한 유일한 고정의 MyISAM 지원하는 테이블 잠금 때문에 유지할 수 있습니다.
InnoDB는 그러나 트랜잭션을 지원하고, 필요 행을 계산하기 위해 테이블 스캔을 할 수.
http://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/
-
==============================
2.다음 블로그 게시물을 살펴 :
다음 블로그 게시물을 살펴 :
COUNT (COL VS 1) COUNT (***)) 2) 쉬운 MySQL의 성능 팁 이노 3) 고속 수 (*)
BTW, 당신은 어떤 엔진을 사용합니까?
편집 : 카운트 최대 속도 기술을 소개 할 때 당신은 행의 일부 금액이 있는지 알고 그냥 필요는 없다. 죄송합니다, 그냥 내 쿼리 문제였다. 예를 들어,이 경우에 따라서, 당신은 단지 필요로 할 때, 알고 당신이 하위 쿼리를 시도 할 수 있습니다 특정 조건 300 행 :
select count(*) FROM ( select 1 FROM _table_ WHERE _conditions_ LIMIT 300 ) AS result
처음에 당신은 설정을 초래하고 그 결과를 계산 작게하다; 이 검사 결과 세트 여전히 것이다, 그러나 당신이 그것을 제한 할 수 있으며, DB는 조건을 만족하는 300 개 이상의 행이 포함되어있는 경우 쿼리가 빠르다는 것을 (다시 한 번,이 DB에 문제가있을 때 "더 많거나 적은 300 행보다 여기에 작동)
결과를 테스트 (내 표는 6.7mln 행이) :
_table_ FROM 1) SELECT COUNT (*) WHERE START_DATE> '2011-02-01' 수익률은 65.4 초 동안 4.2mln
2) SELECT COUNT (*) 발 (_table_ 결과 AS START_DATE> '2011-02-01'LIMIT 100)를 제 1 선택 0.03 초 동안 100 반환
아래의 결과가에 무슨 일이 일어나고 있는지보고 쿼리 설명입니다 :
EXPLAIN SELECT count(*) FROM ( select 1 FROM _table_ WHERE START_DATE > '2011-02-01' LIMIT 100 ) AS result
from https://stackoverflow.com/questions/4871747/mysql-count-performance by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 당신은 어떻게 변수를 사용하여 동적 쿼리에서 IN 절을 지정합니까? (0) | 2020.07.09 |
---|---|
[SQL] 테이블에 연속 3 개 행을 비교 (0) | 2020.07.09 |
[SQL] C #을 LINQ에서 구현 RANK OVER SQL 조항 (0) | 2020.07.09 |
[SQL] sp_MSforeachdb : 결과 만에 데이터베이스에서 결과를 포함 (0) | 2020.07.09 |
[SQL] 어떻게 이동 평균 사용하여 MySQL을 계산합니까? (0) | 2020.07.09 |