MySQL
-
MySQL partitioning의 기록 (22.11~22.12 HospitAl Talk 프로젝트)MySQL 2022. 12. 19. 20:46
아래의 리스트 파티션은 이후 데이터셋을 교체하고 좌표정보를 사용하게 되면서 사용하지 않게 되었다. 구별로만 병원을 찾아오는 것이, 사용자 위치기반 서비스에 온전히 들어맞지 않기 때문. (즉, 구별로 찾는 것이 아니라 각 병원마다 사용자 위치정보를 기반하여 거리계산을 해야 한다는 뜻.) 참조 : https://dev.mysql.com/doc/refman/8.0/en/partitioning-list.html https://myinfrabox.tistory.com/103 https://vertabelo.com/blog/everything-you-need-to-know-about-mysql-partitions/ https://hoing.io/archives/8527 https://velog.io/@gillog/..
-
MySQL index의 기록 (22.11~22.12 HospitAl Talk 프로젝트)MySQL 2022. 12. 19. 20:41
인덱스 프로젝트의 현재 검색시스템은 covering index를 활용해 쿼리 실행계획의 extra 항목에 Using index(디스크를 읽지 않고 메모리에서 모두 처리될 때. 가장 효율적인 표시) 를 띄우긴 했습니다. 거리 정렬 과정에서 나온 Using filesort 라는 신호는 따로 함수를 빼고 mysql에 시키지 않으면서 제거. 그럼에도 type이 index라는 것은, 인덱스 스캔으로 범위를 줄이지 못하고(당연합니다. x에서 인덱스 스캔을 하고 나면 y는 인덱스를 타지 못하거든요...) 전체 인덱스를 모조리 읽고 있다는 뜻입니다. 그런데 mysql이 filesort 할 때…가 더 퍼포먼스가 좋았던 거 같은데 ㅠ 하도 Using filesort를 무슨 absolute evil 처럼들 말해서… 커버링인..
-
MySQL 튜닝의 기록 (22.11~12 HospitAI Talk 프로젝트)MySQL 2022. 12. 19. 13:36
AWS RDS 의 parameter group 설정 설정1 (이후 “ warning get packets out of order …” 와 “too many connection error” 가 사라짐) innodb_dedicated_server : true innodb_thread_concurrency : 2 (일단 cpu 코어 수에 맞춤) innodb_thread_sleep_delay: 1000 마이크로초 (default 10000) max_connections 300 wait_timeout 180 interactive_timeout 180 설정2 : Cache Miss Rate가 엄청나게 높아서, thread cache size를 올려봄. thread_cache_size = 32 설정3: Connect..
-
Sequelize) createdAt의 timezone 설정MySQL 2022. 10. 29. 20:05
맡은 파트에서 상품의 주문시간을 노출시켜야 하는데, 널리 알려져있듯이 한국은 근대적 시간으로부터 변방으로 밀려나있다. GMT 시간에 9시간을 더해야 한다. 문제는 타임존을 (timezone: "+09:00" ) 설정해 sequelize는 9시간을 더해 저장하더라도, 자바스크립트는 그 설정을 따르지 않는다는 것. 그러니까, 타임존 설정만 하면 저장(create)은 9시간을 더하여 되지만 읽어올 때(find)는 도로 GMT 시간이 된다. 이 문제를 정면돌파할 방법을 아직은 알지 못하지만, 우회로는 만들어낼 수 있었다. - dateStrings:true로 시간을 그냥 문자열로 가져온다. - typeCast: true 는 ISO8601 의 날짜를 (그냥 못생기게 나온다고 읽는다.) 깔끔하게 정리해준다. type..
-
SQL : group by, order byMySQL 2022. 10. 9. 23:09
select name, count(*) from users group by name; 통합체로 사고하는 우리의 언어로 풀면 이런 순서다. from -> group by -> select from users :테이블 데이터를 가져오고 group by name : 테이블 에서 같은 이름끼리 합치고 select name, count(*) : 이름과 count(*) 출력. 여기서 카운트는 이름별로 그룹된 것들의 카운트. 매우 직관적인 응용형태들 : 최소, 최대, 평균, 합, 소수점 자릿수 반올림 order by 오름차순 내림차순 사람의 순서로 푼다면 이렇다. from -> where -> group by -> select -> order by 테이블을 가져온 후, 조건으로 거르고, 어떤 조건으로 뭉치고, 그걸 ..
-
SQL : 제외, 범위, 포함, 문자열패턴검색 in, like, distinct, limit, countMySQL 2022. 10. 9. 22:33
포함조건 : in select * from checkins where week in (1,3); week 칼럼의 1, 3주차 데이터. 문자열패턴 조건 : like select * from users where email like '%daum.net'; 제한조건 : Limit select * from orders where payment_method = 'kakaopay' limit 5; 중복 제이터 제외 가져오기 : Distict select distinct(payment_method) from orders; 상식적으로 select를 하면서 중복제거(distinct)를 하고 count를 하는 것이다. Count select count(*) from orders 기타 매우 직관적인 응용법들 위는 gmail..