Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Chat GPT
- AWS
- 챗GPT
- mac 패키지 관리자
- junit
- nextFocusDown
- docker에서 mysql 실행
- Github 등록
- 여러 개
- XML Opacity
- Android Flavor
- TextView 일부분
- Github Token
- codeigniter
- 챗지피티
- 다음으로 이동
- PHP Storm
- Location Permission
- git
- 안드로이드 자동으로 포커싱
- 5회 인증
- Android Studio
- Execution failed for task ':test'.
- git cannot identify version of git executable
- Linux 패키지 관리자
- MySQL
- 팝업 바깥 레이어
- sourceSet
- InvalidTestClassError
- php
Archives
- Today
- Total
128june
[Mysql] where 뒤의 조건은 몇번이나 반복할까? 본문
반응형
먼저 1,000개의 데이터를 가진 Table test가 있습니다.
간단히 num과 title을 가진 test 테이블에 1,000개의 데이터를 넣어보겠습니다.
넣는 방식은 Procedure을 생성하여 반복문으로 넣었습니다.
DELIMITER //
DROP PROCEDURE if EXISTS test_loop1//
CREATE PROCEDURE test_loop1()
BEGIN
DECLARE i INT DEFAULT 1;
while i <= 1000 do
INSERT INTO test ( num, title)
VALUES (i, CONCAT(i,'번째 글 입니다.') );
SET i = i + 1;
END while;
END//
DELIMITER ;
CALL test_loop1();
다음과 같이 SQL 구문을 작성하면 where 조건은 몇번이나 반복할까요?
select * from test where title like '%번째%';
/* 영향 받은 행: 0 찾은 행: 1,000 경고: 0 지속 시간 2 쿼리: 0.016 초 */
당연히 test Table 전체의 개수를 확인하는 1,000번 반복됩니다.
만약 num 중 1이 들어가는 번호를 찾아본다고 해도
테이블 전체를 확인하기 위해 1,000번 반복되고 이후 검색된 272개의 행을 출력합니다.
select * from test where num like '%1%';
/* 영향 받은 행: 0 찾은 행: 272 경고: 0 지속 시간 2 쿼리: 0.000 초 */
같은 방식으로 10만개의 데이터를 가진 board Table을 만들어봅니다. (reg_date는 default로 now()를 설정하였습니다)
DELIMITER //
DROP PROCEDURE if EXISTS test_while_loop//
CREATE PROCEDURE test_while_loop2()
BEGIN
DECLARE i INT DEFAULT 1;
while i <= 100000 do
INSERT INTO board (id, pid, user_id, user_name, subject, contents, views)
VALUES (i, 0, CONCAT('aaa',i), CONCAT('홍길동',i), CONCAT('제목 : ',i), CONCAT(i, '번째 글 입니다.'), 0);
SET i = i+1;
END while;
END//
DELIMITER ;
CALL test_while_loop2();
subject에서 where 구문으로 '제목 : '을 검색하여 보면 당연히 100,000번 실행이됩니다.
select * from board WHERE subject LIKE "%제목 : %";
/* 영향 받은 행: 0 찾은 행: 100,000 경고: 0 지속 시간 2 쿼리: 0.016 초 (+ 0.390 초 네트워크) */
이제 두 테이블을 Join하여 데이터를 출력해 봅시다.
SELECT * FROM board
JOIN test
ON board.id = test.num;
다음과 같은 1,000개의 행을 찾을 수 있었습니다.
여기서! board와 test Table은 총 몇번 실행되었을까요?
바로 1,000 X 100,000 = 100,000,000 번, 즉 1억번 실행됩니다. (board 행 하나당 test 전체를 검색합니다!)
그럼 board의 데이터가 100,000개라고 가정한다면?
총 100억번 검색을 실행할 것이고, 당연히 무게가 무거워질 것입니다.
따라서 쿼리를 작성할 때 무작정 검색하기보단 효율성을 생각해야 합니다.
반응형
'Database > Mysql' 카테고리의 다른 글
[Mysql] Alter Column 추가 ( 여러개 ) (0) | 2021.07.27 |
---|---|
[Mysql] table 생성하기 ( create table / Auto increment / Primary key / Default ) (0) | 2020.06.12 |
[Mysql] Database / user 생성 및 권한 부여 (0) | 2020.06.04 |
Comments