상품 테이블과 후기 테이블, 관심 테이블이 있다고 가정
상품 목록을 조회하면 상품이 20건이 조회되는데
각 상품별로 후기 갯수, 관심 갯수가 보여짐
이 때 후기 갯수랑 관심 갯수는 조인해서 count() 쿼리를 날려야 하잖아.
근데 20건씩 count()가 두번씩 일어나면 db에 굉장히 부담일거 같거든
후기 테이블이랑 관심 테이블에 커버링 인덱스 둬서
인덱스 타게하면 괜찮을까?
아니면 반정규화로 필드를 만들어서 공유 잠금 거는 게 나을까..
상품 목록을 조회하면 상품이 20건이 조회되는데
각 상품별로 후기 갯수, 관심 갯수가 보여짐
이 때 후기 갯수랑 관심 갯수는 조인해서 count() 쿼리를 날려야 하잖아.
근데 20건씩 count()가 두번씩 일어나면 db에 굉장히 부담일거 같거든
후기 테이블이랑 관심 테이블에 커버링 인덱스 둬서
인덱스 타게하면 괜찮을까?
아니면 반정규화로 필드를 만들어서 공유 잠금 거는 게 나을까..
그런걸로 db 부담 영향은 없응거 같은데. 쿼리 최적화 고민이면, db cpu bound보단 io bound를 낮출 수 있는걸 먼저 고민하는게 나아보임. cpu 처리 성능 좋을지언정 쿼리가 빈번하게 발생하면 io 때문에 성능 운운할 문제도 못됨.
커버링 인덱스를 두지않아도 DB부담 없다는 얘기임? 하지만 커버링 인덱스 안두면 후기 수 추적하려고 디스크 랜덤 IO 일어나서 성능 안좋아지지 않나 후기 테이블을 풀 스캔 해야될건데