카디널리티 수치
란 해당 칼럼이 얼마나 고유한 값을 갖고 있는지를 나타내는 수치이다.
이를 구하기 위한 방식은 아래의 순서와 같다.
select * from notice
where createDate between {startDate} and {endDate}
and who = {who}
.
.
.
SELECT
CONCAT(ROUND((DISTINCT ID) / COUNT(*) * 100 ,2),'%') AS ID_CARDINALITY,
CONCAT(ROUND((DISTINCT TITLE) / COUNT(*) * 100 ,2),'%') AS TITLE_CARDINALITY,
CONCAT(ROUND((DISTINCT CONTENT) / COUNT(*) * 100 ,2),'%') AS CONTENT_CARDINALITY,
CONCAT(ROUND((DISTINCT WHO) / COUNT(*) * 100 ,2),'%') AS WHO_CARDINALITY,
CONCAT(ROUND((DISTINCT CREATEDATE) / COUNT(*) * 100 ,2),'%') AS CREATEDATE_CARDINALITY,
CONCAT(ROUND((DISTINCT UPDATEDATE) / COUNT(*) * 100 ,2),'%') AS UPDATEDATE_CARDINALITY,
FROM NOTICE;
→ id는 고유한 값이기에 100%임을 보여주고, 나머지들의 수치들을 보여주고 있다.
→ 위 질의문은 who와 createDate를 이용해 조회하는 중임으로 둘 중 더 수치가 높을 쪽을 선택한다.
→ createdDate를 이용해 인덱스를 만든다.
create index idx_createDate on notice ( createDate );
show index from notice;
# explain을 써서 실행계획 필드에 대한 개요를 알 수 있음
explain
select * from notice
where createDate between '2023-01-15 00:00:00' and '2023-01-15 23:59:59';
❇️ 질의문 정리
CONCAT : 문자열을 합치는 함수
SELECT CONCAT("hi","world") AS test # test라는 컬럼에 hiworld가 적혀 나온다.
DISTINCT : 중복을 제거해 주는 함수
SELECT DISTINCT CA,CB # CA,CB 칼렁에서 중복된 값들을 제거하여 보여준다.
무조건 Index를 타지는 않는다.
HINT 기능
select * from table use index(idx_column);