인덱스
데이터가 1억개라면?
코딩테스트의 조회 라는 것도 알고리즘이 없이 항상 완전탐색을 한다면 시간이 굉장히 오래 걸릴 것이다.
하지만 해시테이블이 있어서 빠르게 조회 사간을 빠르게 가져갈 수 있듯이 데이터베이스도 인덱스를 주면 조회를 빠르게 할 수 있다.
활용
인덱스가 없는 경우
만약 아이유라는 이름의 행을 찾는다고 하고 쿼리를 만들어보자
select * from member where member_name = '아이유';
이렇게 쿼리를 적는다면 데이터가 적을 경우엔 빠르게 가져올 수 있을것이다
어떻게 찾았는지는 이 탭을 클릭하면 알 수 있다. 인덱스가 없을 경우엔 FULL TABLE SCAN이라고 나올 것이다.
하지만 데이터가 1억개라면? '아이유'라는 이름을 가져오는데 하루 혹은 데이터베이스의 양에 따라 더 걸릴 수도 있을 것이다. 그래서 index를 지정해 보도록하자
인덱스 지정
인덱스를 지정하는 쿼리를 작성해보자
create index idx_member_name on member(member_name);
이 쿼리를 작성한 직후에는 별 다른 반응이 없지만 위의 아이유라는 이름을 찾는 쿼리를 작성해보면
Non-Unique Key Lookup이라고 찾는 방법이 달라졌을 것이다.
뷰
뷰는 테이블과 상당히 동일한 성격의 데이터베이스 객체이다. 다만 뷰를 사용하면 보안도 강화하고 SQL문도 간단하게 사용할 수 잇다.
뷰?
가상의 테이블
사용자 입장에서는 테이블과 뷰를 구분 할 수 없다. 하지만 뷰는 실제 데이터를 가지고 있지 않으며, 진짜 테이블에 링크된 개념이라고 생각하면 된다.
뷰는 윈도우즈 운영체제의 바로가기 아이콘과 비슷한 개념이다. 윈도우즈 바로가기를 클릭하면 실제로 실행 되는 파일은 다른 곳에서 실행된다.
실습
뷰 만들어보기
create view member_view
as
select * from member;
조회해보기
select * from member_view;
바로가기를 누른 것과 같은 원리이다.
굳이 뷰를 사용하는 이유?
- 보안에 도움이 된다
- 긴 sql문을 간략하게 만들 수 있다.
나중에 더 깊이 작성 해보도록 하겠다.
SQL안에서도 일반 프로그래밍 언어처럼 코딩을 할 수 있다.개념 이해하기MySQL에서 제공하는 프로그래밍 기능으로 여러개의 SQL문을 하나로 묶어서 편리하게 이용할 수 있다. 이 외에 연산식, 조건문 ,반복문 등을 사용할 수도 있다.
실습
두 쿼리문을 동시에 실행해보기
select * from member where member_name = '나훈아';
select * from product where product_name = '삼각김밥';
이 두개의 쿼리문을 앞으로 동시에 자주 써야한다고 가정해보자하나의 스토어드 프로시저로 만들어보기delimiter // ~ delimiter ;지금은 스토어드 프로시저를 묶어주는 약속이라고 생각하자
스토어드 프로시저
delimiter //
create procedure myProc() begin select * from member where member_name = '나훈아';
select * from product where product_name = '삼각김밥';
end //
delimiter ;
그리고 begin 과 end 사이에 sql문을 넣으면 된다
실행
call myProc();
두개의 쿼리문을 매번 적을 필요 없이 이것만 적으면 된다
'데이터' 카테고리의 다른 글
깊게 알아보는 select 문 (0) | 2024.01.16 |
---|---|
SELECT-FROM-WHERE (0) | 2024.01.09 |
데이터베이스 모델링 (0) | 2023.12.21 |
SQL 문 (0) | 2023.07.23 |
바커표기법 (0) | 2023.07.18 |