database

    mysql index를 타지않는 경우

    인덱스를 타지 않는 경우 1. 인덱스 컬럼의 변형 select * from table where LOWER(name) ='word'; select * from table where idx - 1 = 5; 이 처럼 인덱스에 변형을 가하게 되면, DBMS가 인덱스를 이용하지 않는다. 2. 인덱스 컬럼의 내부적인 데이터 변환 select * from table where age = '30' 문자값 데이터타입을 갖는 컬럼에 ‘값’ → 값 을 하지 말고 정확한 데이터 타입을 넣어야 인덱스를 탈 수 있다. 3. NOT 또는 IN 연산자 사용 NOT일 경우에도 인덱스를 타긴 타지만, 일반적으로, NOT에 사용된 값이 아닌 데이터의 비율이 높은 경우가 많기 때문에 인덱스를 타지 않는 경우가 많다. 마찬가지로 IN일 경..

    Querydsl 방언 사용하기

    Dialect JPA를 사용하면 데이터베이스 문법을 잘 알지 못해도 hibernate에 의해 설정한 데이터베이스의 쿼리로 바꿔준다. SQL,JPQL은 문자열인 반면 QUERYDSL을 사용하게 되면 java코드로 쿼리를 작성할 수 있게되고 컴파일 시점에 문법오류 를 확인할 수 있다는 큰 장점이 있다. application.yml에 사용하는 DB의 dialect가 설정되어있다. spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect FullText Search는 Dialect에 등록된 함수가 아니였기 때문에 querydsl 에서 사용할 수 없기 떄문에 별도로 커스텀해줘야한다. application.yml 설정 jpa: show-sql: true h..

    mysql DB 데이터 백업/복구(export/import) dump뜨는법

    내 로컬에 있는 mySQL의 사용자 정보나 테이블을 import/export 하고 싶을 때 sql 파일을 빼거나 밀어넣어 보자 주의해야 할 것은 mysql 접속해서 입력하는 게 아니라, mysql 밖 터미널에서 입력하는 것이다 ① DB Export mysqldump –u DB사용자 –p DB명 > 파일명 ex) mysqldump -u root -p shabDB > /home/user/test.sql ⑴ 사용자를 포함한 전체 DB를 export할 때는 -A 옵션 사용 mysqldump -u root -p -A > 파일명 ex) mysqldump -u root -p -A > test.sql ⑵ DB에서 특정 테이블만 제외하고 export할 때는 --ignore-table 옵션 사용 mysqldump –u D..

    MYSQL 조회시 FLOW

    MySQL 조회시 플로우 아래는 MySQL 서버에 조회를 요청 했을 때 flow chart입니다. 여기서 client는 쿼리를 요청한 클라이언트, 즉 SQL을 입력한 개발자입니다. Query Cache SQL문이 key, 결과가 value인 맵입니다. 데이터가 변경되었으면 쿼리캐시가 삭제되어야겠죠?(조회 결과가 달라질 것이기 때문에) 이는 동시 처리 성능 저하를 유발하고, 버그의 원인이 되어 MySQL 8.0 버전부터는 삭제되었습니다. Parsing 사용자가 요청한 SQL을 잘게 쪼개어 서버가 이해할 수 있는 수준으로 분리합니다. Preprocessing 해당 쿼리가 문법적으로 틀린지 확인하여 부정확하면 처리를 중단합니다. (흔히 만나보는 syntax 에러는 parser와 preprocessor에서 발생..