728x90
반응형

db 5

Mysql 인덱스

인덱스란? 번역을하면 바로 색인이라는 단어로 번역된다. 색인은, 검색하면 책속의 낱말이나 어떤 챕터나 구절들을 빠르게 찾아볼 수 있게 쪽수 정보를 나타내주는 것을 뜻한다. 이 개념을 DB에 적용시킨 것이다. 인덱스는 어떻게 구성하는가? 인덱스는 CREATE INDEX 키워드로 구성이 가능하다. Team 이라는 테이블이 이렇게 있다. id(primary key) name member_id grade 1 홍길동 1 1 2 가나다 2 2 3 고길동 3 3 4 나길동 4 4 이름만으로 인덱스를 구성하고 싶다면 아래와 같이 수행해주면 된다. CREATE INDEX 테이블(칼럼); CREATE INDEX team_index team(name); 이렇게 해주게 되면 name의 오름차순 순서로 정렬되게 된다. 왜 정렬..

쿼리 개선 2

쿼리 속도 개선 1.6초 -> 0.4초 메타테이블과의 조인을 해서 정보를 얻어오는 과정 서로 논리적인 데이터베이스는 다른데 mysql에서 뷰 테이블을 사용하고 있음 그런데 유저 개개인의 데이터에서 매칭시키는 메타테이블의 idx 칼럼이 인덱스가 정해져있지 않았다. 그래서 유저 개개인의 데이터를 전부 조회해서 매칭되는 데이터를 추리고 있었다. 개선안 100개 이상의 row를 탐색하던 것이 25개만 탐색하는것으로 바뀐 실행이 나오게 된다. 그러면서 Extra가 제외되고 참조 정보가 인덱스로 가게 된다. 지금은 100개인 데이터였지만, 만약에 조회할 데이터가 10만 건, 100만 건 이렇게 늘어날 수록 시간은 증가했을 것이다. 진행중인 mysql 독서 스터디가 이런 생각을 하는데 도움을 많이 줬다.

쿼리 작성 및 최적화

Real Mysql real mysql 책을 읽으면서 스터디 한 내용을 정리하고자 한다. 일단 11.1 부터 11.3까지의 내용만을 정리했다. 내가 사용하는 애플리케이션에서 특정 데이터를 테이터베이스에 저장하거나 조회를 할 때 SQL이라는 문장을 사용해야 한다. 데이터베이스의 테이블이나 구조를 변경할때는 DDL(데이터 정의 언어) 테이블의 데이터를 조작을 위한 언어는 DML(데이터 조작 언어) 이다. SQL작성 규칙은 mysql의 서버 시스템 정책에 따라 바뀔 수 있다. 이 정책은 데이터베이스에 어떤 테이블의 데이터들이 들어가지 않았을 때 설정하는 것이 중요하다. 영문 대소문자 구분 Mysql에서는 설치된 운영체제에 따라서 대소문자를 구분하는데, DB의 테이블이 디스크의 디렉토리나 파일로 매핑이 되기 때..

쿼리 속도 개선기

쿼리 속도 개선 업무중 엄청 느린 쿼리들이 여럿 있었다. 그냥 단순히 select * from 으로 모든 칼럼을 조회하는 것이 아니라 조건에 맞는 데이터를 뽑는 로직들이 있었는데 일단 복합키로 PK가 잡혀있는 상황이고, 세개의 복합키들 중에 두개는 중복되는게 많았다. 다시 말해 카디널리티가 낮은 것 들이었다. JPA를 사용해서 더럽게 뽑아온 다음에 가공하려고 했었지만, 데이터가 많아서 그것조차 조금 어려운 상황이었다. 계속 똑같은 쿼리문을 반복적으로 실행시키니까 처음 사용자입장에선 빨리 받아오는 것처럼 느낄지 모르겠다 (근데 이것도 느리다.) 하지만 맨 뒤쪽에 와서 이 쿼리를 실행하게 된 사람은 앞 사람들이 요청한 그 트랜잭션들이 처리된 후에나 실행이 되기 때문에 쿼리가 1초이고 누른 사람이 10명이라면..

DB 2022.08.07

[JPA] MariaDB Charset 오류 해결

JPA 오류 💢 jpa에서 spring.jpa.hibernate.ddl-auto=create 속성으로 테이블을 만들어줄 경우에 MariaDB default로 어떤값을 주던간에 latin1속성으로 insert가 된다. 그래서 이방법 말고 안에서 테스트만 한다고 하면 h2 DB를 사용하는 것이 더 바람직하다. 아니라면 ddl-auto 속성을 주지않고 직접 MariaDB에서 어떤 Column들을 넣을지 결정하고 먼저 생성한 다음 연결하는게 좋을 것이다. 이것 때문에 애를 많이 먹었다. [mysqld] datadir=C:/Program Files/MariaDB 10.5/data port=3306 innodb_buffer_pool_size=1948M init_connect="SET collation_connect..

JPA 2022.08.04
728x90
반응형