SELECT COUNT(*) where ix_fd = 'A' AND non_ix_fd = 'B';
SELECT * where ix_fd = 'A' AND non_ix_fd = 'B';
ix_fd 조건은 인덱스를 사용할 수 있지만 non_ix_fd는 사용할 수 없음
그래서 ix_fd 컬럼의 인덱스를 사용해서 대상 레코드를 찾은 후 non_ix_fd의 컬럼의 값 비교
Covering Index
1
SELECT COUNT(*) WHERE ix_fd1 = ? AND ix_fd2 = ?;
2
SELECT COUNT(ix_col2) WHERE ix_fd1 = ?;
NON - Covering Index
3
SELECT COUNT(*) WHERER ix_fd1 AND non_ix_fd1 = ?;
4
SELECT COUNT(non_ix_fd1) WHERE ix_fd1 = ?;
모든 컬럼들을 인덱스에 추가하기에는 성능적인 장점보다는 단점이 많을 수 있기때문

최고의 튜닝은 쿼리 자체를 제거하는것
쿼리를 제거할수 없다면 대략적 건수 활용
SELECT COUNT(*) FROM (SELECT 1 FROM table LIMIT 200) z;
통게 정보 이용
SELECT TABLE_ROWS as rows
FROM INFORMATION)SCHEMA.tables
WHERE schema_name = ? AND table _name = ?
제거 대상
인덱스 활용하여 최적화 대상
ex) disintceAlias.comment_id 는 사실 pk 컬럼이므로 실제 distince 작업ㅇ ㅣ필요하지 않지만 TypeORM에서는 distinct를 사용해서 쿼리를 자동 생성한다.