DB
-
Read DB(SELECT), Write DB(UPDATE, DELETE, INSERT)DB 2023. 9. 4. 01:05
DB 연산에 대해 배우던 중 SELECT의 경우 다른 연산에 비해 더욱 시간이 걸린다는 것을 알았다. 그래서 보통 큰 시스템의 경우에는 CRUD의 Read만을 따로 담당하는 DB를 만들어 분기하는 경우가 있다. Write(UPDATE, DELETE, CREATE) 요청이 들어오면 Write DB로 연결시켜 연산을 처리하고 그 결과를 Read DB에 Replicate(복제)하는 방식이다. 반면 Read(SELECT) 요청이 들어오면 Read DB로 바로 연결을 시켜주는 것이다. 이를 위한 방법으로 우선 처음 연결할 때에 어떤 DB를 사용할 것인지를 알아야 한다. 자바에서 DB와의 연결을 위해 DataSource를 사용할 때라면 DB 연결 전 준비까지인 JDBC(자바에서 DB 연결을 위한 API)까지의 연동..
-
DB 성능차이에 대한 TipsDB 2023. 7. 29. 22:36
DB 성능을 조정하기 위한 여러가지 꿀팁들이 있겠지만 여기서 한 번 최대한 정리해보려한다. 1. 서브쿼리보다 join을 이용하는 것이 보통 더 빠르다! 그래서 보통 서브쿼리랑 JOIN문이 같이 있는 쿼리의 경우 더 빨리 끝나는 JOIN을 먼저 처리하고 서브쿼리는 나중에 처리하는 것이 좋다고 한다. # 예시 select a.* # 더 빨리 나오는 JOIN문을 먼저 처리하였다. , (SELECT count(*) test FROM testDB WHERE a.id = b.id) # 이렇게 생긴 것이 서브쿼리 from (SELECT 테이블1,컬럼1, 테이블2,컬럼2, 테이블3,컬럼3, ... FROM 테이블1 join 테이블2 # 조인문 on 테이블1.컬럼1 = 테이블2.컬럼2 join 테이블3 on 테이블1.컬..
-
외래키(foreign key)를 쓰지 않는 이유DB 2023. 7. 22. 01:07
오늘 일을 하며 DB를 짜던 도중 외래키를 쓰지 않는 것이 좋다는 선임분의 말을 들었다. 이때까지 식별관계, 비식별관계 따져가며 테이블과 테이블 간의 접점을 위해 외래키를 잘 설정해주려고 노력했는데 왜인지 의아했다. 하지만 실제로 외래키를 설정하게 되면 제약사항이 많아져서 그렇다고 한다. 가령 cascade 설정으로 인해 A테이블을 삭제하면 B테이블이 삭제되거나, A를 수정하기 위해선 B까지 수정해야하는 경우들이 있다. 외래키에 대한 이해를 위해 간단한 예시를 첨부했다. 수강하는 주체인 학생과 그 대상인 강의, 그리고 그 행위를 나타내는 등록이 있다. 누가 어떤 강의를 듣는지 알기 위해 위와 같이 외래키로 테이블들을 이어주었다. 참고로 이들은 식별관계이다 cf) 식별관계: 어떤 테이블 (Student와 ..
-
varchar와 nvarchar의 차이DB 2023. 7. 21. 00:45
다양한 길이의 글자를 저장하는 데이터 타입, 유니코드를 지원하지 않는다. 그래서 영문, 숫자 또는 데이터베이스의 기본언어로 설정된 것에 대해서는 1바이트, 그 외의 언어에는 글자당 2바이트가 사용된다. 최대 길이(max): 지정하지 않으면 기본값 1이다. 255 bytes를 초과할 수 없다. => MySQL 기준 5.0.3 이후 최대 값은 65535bytes이다. 최소 길이(reserve): 지정하지 않으면 기본 값은 0 이다. 범위는 0 - 최대 값 이다. 공백까지 그대로 저장한다. varchar(max, reserve) Plus) 255바이트까지는 길이에 대한 정보를 담는 것에 1바이트가 쓰이지만 255바이트를 초과하면 길이 정보에 2바이트가 쓰인다. 쉽게 말해, 254바이트 만큼의 텍스트를 쓴다고 ..