본문 바로가기
반응형
SMALL

전체보기125

[개발생각] REST API URI 설계에 대한 고민(feat. Optional Chaining ?. 연산자) 개발 환경 참고 Frontend : Bootstrap(template), jQuery, ejs(template) Backend : node, express(framework) DB : mysql 개요 상품의 일시품절 상태를 설정하고, 확인날짜(날짜 선택 지정)를 설정하는 기능은 이미 구현되어 있는 상태 상품 상세 페이지에서 일시품절을 걸고, 확인날짜를 선택하고 수정하면 설정일자가 현재시간(NOW())으로 업데이트 된다. 문제점 상품 상세페이지에서 수정을 하면 설정일자가 현재시간(NOW())으로 업데이트가 되는데, form 형식으로 데이터를 보내고 수정하는 방식으로 개발되어 있기 때문에 상품명, 공급가 등 그 외 다른 상품정보를 수정하더라도 설정일자가 현재시간으로 업데이트가 된다. (설정일자가 설정일자가 .. 2023. 7. 12.
[SQL 튜닝] 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 급여 테이블에서 현재 유효한 급여 정보만 조회하고자 사용여부 열의 값이 1인 데이터를 출력하는 쿼리 EXPLAIN SELECT COUNT(1) FROM 급여 WHERE 사용여부 = 1; - 급여 테이블 컬럼 수 : 2844047 (약 284만 건) - SQL문 결과 : 총 1건의 결과 출력, 373ms 소요 COUNT(1) = 42842 - key 항목 : I_사용여부 인덱스 사용 - type 항목 : index → 인덱스 풀스캔 방식으로 수행 - filtered 항목 : 10 → MYSQL 엔진으로 가져온 데이터 중 10% 추출해서 최종 데이터 출력 즉, rows 항목에 표시된 2,838,438건의 데이터를 스토리.. 2023. 7. 11.
[SQL 튜닝] 사용하지 않는 함수를 포함하는 나쁜 SQL 문 사용하지 않는 함수를 포함하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | 사원 테이블에서 성별 기준으로 몇 명의 사원이 있는지 출력하는 쿼리 EXPLAIN SELECT IFNULL(성별, 'NO DATA') AS 성별, COUNT(1) 건수 FROM 사원 GROUP BY IFNULL(성별, 'NO DATA'); - 사원 테이블 컬럼 수 : 300024 (약 30만건) - SQL문 결과 : 총 2건의 결과 출력, 115ms 소요 M(남) - 179973, F(여) - 120051 - 성별의 값이 NULL 이면 NO DATA 출력 (IFNULL 처리) - Key 항목 : I_성별_성 인덱스로 나타나므로 인덱스 풀 스캔 방식으로 수행 - Extra 항목 : Using temporary 이므로 임시.. 2023. 7. 10.
[SQL 튜닝] 기본 키를 변형하는 나쁜 SQL 문 실무적인 SQL 튜닝 절차  기본 키를 변형하는 나쁜 SQL 문 현황 분석 | 튜닝 전 실행 계획 | EXPLAIN SELECT * FROM 사원 WHERE SUBSTRING(사원번호,1,4) =1100 AND LENGTH(사원번호)=5; - 사원 테이블 컬럼 수 : 300024 (약 30만건) - SQL문 결과 : 총 10건의 결과 출력, 100ms 소요 - type 항목 : ALL → 테이블 풀 스캔 방식 - 인덱스를 사용하지 않고 테이블에 바로 접근함 - 필요한 범위에만 접근하는 대신 처음부터 끝까지 스캔하기 때문에 비효율적임 현황 분석 기본 키와 인덱스 현황 확인 기본 키(PRIMARY) : 사원번호 인덱스 : I_입사일자, I_성별_성(성별, 성) (3개) SHOW index FROM 사원; .. 2023. 7. 8.
[MYSQL] 확장된 실행 계획 수행 좋고 나쁨을 판단하는 기준 select_type 항목의 판단 기준 좋음 : SIMPLE, PRIMARY, DERIVED 나쁨 : DEPENDENT *, UNCACHEABLE * type 항목의 판단 기준 좋음 : system, const, eq_ref 나쁨 : index, all extra 항목의 판단 기준 좋음 : Using index 나쁨 : Using filesort, Using temporary MYSQL의 확장된 실행 계획 수행 | EXPLAIN FORMAT = TRADITIONAL | 실행 계획 확인하는 키워드 EXPLAIN 사용 → 기본 포맷 TRADITIONAL | EXPLAIN FORMAT =TREE | 트리형태로 추가된 실행 계획 항목 확인 EXPLAIN FORMAT = TREE.. 2023. 7. 7.
[MYSQL] 실행 계획 수행 - rows, filtered, extra 기본 실행 계획 항목 분석 id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, extra rows SQL문을 수행하고자 접근하는 데이터의 모든 행(row)수를 나타내는 예측 항목 수시로 변동되는 MYSQL의 통계정보를 참고하여 산출하는 값이므로 수치가 정확하지 않음 최종 출력될 행 수 가 아니라는 점에 유의해야 함 SQL문의 최종 결과 건수와 비교해 rows 수가 크게 차이 날 때는 SQL 튜닝 대상 filtered SQL문을 통해 DB 엔진으로 가져온 데이터 대상으로 필터 조건에 따라 어느 정도의 비율로 데이터를 제거했는지를 의미하는 항목 DB 엔진으로 100건의 데이터를 가져왔다고 가정 W.. 2023. 7. 6.
반응형
LIST