본문 바로가기
320x100
728x90

DataBase10

쿼리 속도 향상을 위한 방법들 공부용으로 생각날 때마다, 배울 때마다 추가하자. 1. select를 할 때는 필요한 데이터만 뽑는다. 예를 들면 select * from student; 보다는 select name,age,class from student;를 하는 방법이다. 이렇게 되면 IO가 줄어들면서 DB의 쿼리에 성능을 효과적으로 사용할 수 있다. 애초에 테이블 자체가 row가 많이 없다면 상관없지만 양이 많아지면 5초가 지나도 결과가 안 나오는 경우가 많다. 2.like ='%something%'을 사용할 때는 %를 가급적 뒤에만 붙이자. %를 앞에 붙이게 되면 ~로 시작하는 문자열을 다 검색해야 해서 연산의 시간이 증가하지만 뒤에만 붙이게 되면 특정 문자열 이후의 값들만 검색하면 되므로 불가피할 경우가 아니라면 문자열 검색의.. 2021. 2. 14.
MySQL]The MySQL server is running with the --read-only option so it cannot execute this statement 프로젝트 신규 기능 개발 관련해서 트랜잭션을 실행하면서 오류가 발생했다. 이 오류의 이유를 굉장히 많이 찾아봤는데, 원인은 다양했다. 1.트랜잭션을 처리하려는 테이블에 PK가 없는 경우. 2.DB가 뻗어버린경우. 3.트랜잭션을 처리하려는데 권한이 없는 경우. 나는 3번 째의 경우로 라이브 테이블에 대한 접근 권한이 없었다. 참고 : stackoverflow.com/questions/35445190/strange-mysql-read-only-error 2021. 2. 8.
Mybatis] MySQL] concat 문자열 검색 문제는 위 사진으로부터 시작됐다. mybatis에서 mapper설정을 해서 사용하던 중, like절에서 파라미터가 포함된 문자열을 검색해야 했는데, 따옴표 안에 넣으니 #{param}도 문자열로 인식해버렸다. 해결 MySQL의 concat함수를 이용해서 문자열을 더해주면서 문제를 해결했다. native 쿼리를 위와 같이 작성해주면, 쿼리가 실행되는 시점에서 파라미터와 '%%'을 합침으로써 의도한 대로 쿼리를 잘 실행했다. 2021. 1. 19.
MySQL] 테이블 복사하기 업무를 진행하면서 실제 사용하는 테이블 말고, 임시로 생성된 테이블에 작업을 할 일이 생겼다. 임시 테이블 안에 기존의 데이터를 추가해야 하는 방법을 찾아서 적용했다. 1. 임시 테이블을 아직 만들지 않은 경우 -> 임시 테이블을 만들면서 원본 테이블의 데이터를 복사해옴 CREATE TABLE [대상 테이블명] SELECT * FROM [원본 테이블명] 2. 임시 테이블을 만들었고 데이터만 복사하는 경우 INSERT INTO [대상 테이블명] SELECT * FROM [원본 테이블명] 3. 스키마가 다른 테이블에서 데이터를 복사해올 경우 mysql> INSERT INTO [대상 데이터베이스명]. [대상 테이블명] -> SELECT * FROM [원본 데이터베이스명]. [원본 테이블명] 4.컬럼에 제약조건.. 2021. 1. 19.
300x250
320x100