java 코드를 nodejs로 바꾸면서 총결산 조회하는 api에서 12초나 걸리는 말도 안되는 일이 있었다. 여러 종류의 금액을 연산하는 것 때문인가 싶어서 인덱스를 이렇게도 해보고 저렇게도 해봤는데 여전히 12초!
이 코드 저 코드 다 주석처리 해보며 어디에 원인이 있나 찾아보니 count 부분 때문이었다.
아래의 출처 링크에서 얻은 정보는 이러하다.
1. count(*): 단순 행을 세는 역할을 한다(Mysql 내부적으로 데이터를 읽지않고 행의 갯수를 흝고 지나간다는 것)
2. count(컬럼): 행의 값을 세는 역할을 한다 (데이터를 읽는 것)
속도 : count(distinct(컬럼)) < count(컬럼) < count(*) 순서
1. 불필요한 데이터를 셀 필요없이 행의 갯수만 얻고 싶다면 * 를 쓰는것이 빠르다
2. COUNT를 하려는 테이블의 총 로우 개수가 100개 미만이라면 COUNT가 더 빠르다.
3. 100개 이상이면 sysindexes이 더 빠르다(COUNT 키워드를 실행하게 되면 table scan대체 쿼리에서는 해당 rows값을 가져오기 때문에 더 빠르다.)
4. 따로 count index 컬럼을 만들어서 사용하는 방법도 있습니다
ex)
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('TestTable') AND indid < 2;
https://blog.naver.com/birdparang/221574304831
https://kkeolmusae.tistory.com/94