DataBase29 [MySQL] BETWEEN 연산자를 활용한 쿼리 최적화 BETWEEN 연산자 BETWEEN 연산자는 "크거나 같다"와 "작거나 같다"라는 두 개의 연산자를 하나로 합친 연산자다. 다른 비교 조건과 결합해 하나의 인덱스를 사용할 때 주의해야 할 점이 있다. 아래 동등 비교 연산자와 BETWEEN 연산자를 이용해 부서 번호와 사원 번호로 dept_emp 테이블을 조회하는 다음 쿼리를 한번 생각해보자. SELECT * FROM dept_emp WHERE dept_no = 'd003' AND emp_no = 100001; SELECT * FROM dept_emp WHERE dept_no BETWEEN 'd003' AND 'd005' AND emp_no = 100001; dept_emp 테이블에는 (dept_no, emp_no) 컬럼으로 구성된 프라이머리 키가 존재한.. 2023. 4. 11. [MySQL] LIKE 연산자를 활용한 쿼리 최적화 LIKE 연산자는 인덱스를 이용해 질의할 수 있다. DBMS에서는 단순한 문자열 패턴 비교 연산자로 LIKE 연산자를 REGEXP 연산자보다 더 많이 사용한다. REGEXP 연산자는 인덱스를 전혀 사용하지 못한다는 단점이 있지만, LIKE 연산자는 인덱스를 이용해 처리할 수 있다. LIKE 연산자는 정규 표현식을 검사하는 것이 아니라, 어떤 상수 문자열이 있는지 없는지 정도를 판단하는 연산자다. LIKE 연산자는 와일드카드 문자인(&, _) 가 검색어의 뒤쪽에 있다면 인덱스 레인지 스캔으로 사용할 수 있지만, 와일드카드가 검색어의 앞쪽에 있다면 인덱스 레인지 스캔을 사용할 수 없으므로 주의해서 사용해야 한다. B-Tree 인덱스를 이용한 검색은 100% 일치 또는 값의 앞부분(Left-most part).. 2023. 4. 7. [H2 DB] insert시 auto increment인 sequence 값을 바로 받아 오는 법 DAO 메서드 지금까지 DAO(Data Access Object) 클래스의 메서드를 아래와 같이 설계해왔다. public void insert( Ans ans ) { ... } public Ans select(String answerId ) { ... } public List selectAll(String questionId) { ... } 테이블 구조 DTO(Data Transfer Object) 클래스인 Ans의 테이블 구조는 아래와 같다. CREATE TABLE ANSWERS ( answerId bigintauto_increment, writervarchar(30)NOT NULL, contentsvarchar(5000)NOT NULL, createdDatetimestampNOT NULL, quest.. 2023. 3. 28. [MariaDB] 정규화 관련 / 맵핑 테이블 글 태그가 1번인 글만 출력하겠다는 쿼리문을 손쉽게 작성할 수 있다. 하지만, 글 태그가 2번인 글만 출력해 달라는 쿼리문 또는.. 정보를 원한다면? 어떻게 할까? 이는 불가능하다. 따라서 제1 정규형을 만족하는 정규화가 필요하다. 글번호에 따라서 글 태그가 변경되니, 글 번호의 컬럼을 가져오고, 글 태그를 가져오면 만들 수 있다. 2023. 1. 24. MariaDB 자동 삭제 / 이메일 인증코드 전송 후 자동 삭제 우선 로그인 페이지를 아래와 같이 구현했다. 사용자가 이메일을 입력 후 전송하기 버튼을 클릭하면 해당 이메일로 인증번호가 발송된다. 인증 코드의 유효시간은 1분으로 설정했고, 이에 따라 DB에서도 1분 뒤에 자동적으로 삭제되게끔 설정해놨다. 우선 입력한 이메일에 인증번호가 도착했고 동시에 아래와 같이 DB에도 insert 된 것을 확인할 수 있다. 1분 뒤에 아래와 같이 확인해봤다. delet를 하지 않았지만, 자동적으로 삭제된 것을 볼 수 있다. 우선, 이를 구현하기 위해 이벤트 스케쥴러(Event Scheduler)에 대해서 알아보도록 하자. DB를 사용할 때, 소량의 데이터를 CRUD하는 것은 큰 문제가 되진 않지만 대량의 데이터를 처리해야 하는 경우, 시간과 쿼리문을 미리 지정해두면 일정 시간에 .. 2022. 12. 30. [MariaDB] datediff 두개의 날짜값의 차이를 int로 반환하는 내장함수이다. 예를 들어 게시판에서 게시글이 오늘 기준으로 날짜 차이가 0 이라면 신규 글이라는 것을 확인할 수 있을 때 사용한다. MariaDB 에서 selec 쿼리문을 작성할 때 아래와 같은 형식으로 작성할 수 있다. "select seq, writer, date_format(wdate,'%Y-%m-%d') wdate, datediff(now(), wdate) wgap from board1"; 2022. 11. 15. 이전 1 2 3 4 5 다음