-
SQL : INDEX ์ ๋ฆฌ ๋ฐ ์ธ๋ฑ์ค๋ฅผ ํ์ง ์๋ ๊ฒฝ์ฐDB 2020. 5. 27. 21:45๋ฐ์ํ
INDEX ?
ํ ์ด๋ธ์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ
๋ณดํต INDEX๋ฅผ ํ ์ด๋ธ์ ํน์ ์ปฌ๋ผ์ ํ๊ฐ ์ด์์ ์ฃผ๋ฉด Index Table์ด ๋ฐ๋ก ๋ง๋ค์ด์ง๋๋ฐ ์ด Index Table์๋ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ก์ฐ๊ฐ๊ณผ rowid ๊ฐ์ด ์ ์ฅ๋๊ฒ ๋๋ฉฐ ๋ก์ฐ์ ๊ฐ์ ์ ๋ ฌ๋ B-TREE๊ตฌ์กฐ๋ก ์ ์ฅ์์ผ ๋์ด ๋ ๋น ๋ฅด๊ฒ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ฐ ๋์์ ์ค
ํ์ง๋ง UPDATE, INSERT, DELETE์์ ์๋๊ฐ ๋๋ ค์ง๋ค๋ ๋จ์ ์ด ์๋๋ฐ, ์ด ์ธ๊ฐ์ง๋ ์๋ณธํ ์ด๋ธ์ ๋ฌผ๋ก INDEX TABLE์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ์์ผ ์ค์ผํ๊ธฐ ๋๋ฌธ
์ฌ์ฉ๋ฐฉ๋ฒCREATE INDEX ์ธ๋ฑ์ค์ด๋ฆ ON ํ ์ด๋ธ์ด๋ฆ (ํ๋์ด๋ฆ1, ํ๋์ด๋ฆ2, ...)
ex) create index idx_account on account(account_id);
-> account Table์ idx_account ๋ผ๋ index๋ฅผ ๋ง๋ค์ด์ค์ผ๋ก์จ account_id ์กฐํ ์ ์ฑ๋ฅ์ด ์ข์์ง
์ธ๋ฑ์ค๋ฅผ ํ์ง ์๋ ๊ฒฝ์ฐ1. ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ณํ
select * from table where LOWER(name) ='word';
select * from table where idx - 1 = 5;
์ด ์ฒ๋ผ ์ธ๋ฑ์ค์ ๋ณํ์ ๊ฐํ๊ฒ ๋๋ฉด, DBMS๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ง ์๋๋ค.
2. NOT ๋๋ IN ์ฐ์ฐ์ ์ฌ์ฉ
NOT์ผ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ์ธ๋ฑ์ค๋ฅผ ์ํ๋ ๊ฒ์ด ์๋๋ค.
NOT์ผ ๊ฒฝ์ฐ์๋ ์ธ๋ฑ์ค๋ฅผ ํ๊ธด ํ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก, NOT์ ์ฌ์ฉ๋ ๊ฐ์ด ์๋ ๋ฐ์ดํฐ์ ๋น์จ์ด ๋์ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก IN์ผ ๊ฒฝ์ฐ์๋, IN์ ํฌํจ๋ ๋ฐ์ดํฐ๋ค์ ๋น์จ์ด ๋งค์ฐ ๋๋ค๋ฉด FULL SCAN์ ํ๋ ๊ฒ์ด ๋ซ๋ค๊ณ DBMS๊ฐ ํ๋จํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ํ์ง ์๋๋ค.
3. ์์ผ๋ ์นด๋ LIKE๋ฌธ์ฅ์์ ๋ฒ์๋ฅผ ์ ์ฒด๋ฅผ ์ง์ ์
select * from table where name like '%word';
๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ ์ธ๋ฑ์ค๋ก ์ก์์ ๋, %๊ฐ ์์ชฝ์ ์ฌ์ฉ๋๋ฉด ์ ๋ ฌ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ํ ์ด๋ธ FULL SCAN์ด ์ด๋ฃจ์ด์ง๋ค.
select * from table where name like 'word%';
๋น์ฐํ ์๊ธฐ์ง๋ง ์ฟผ๋ฆฌ๊ฐ ์ด๋ฐ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ํ๋ค. ๋ฌธ์์ด ์ ๋ ฌ ์์๋ฅผ ๊ทธ๋๋ก ์ด์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
4. ๋ณตํฉ ์ปฌ๋ผ index์์ ์กฐ๊ฑด์ด ์๋ชป๋์ฌ index ๊ฐ ์ ์ฉ ๋์ง ๋ชปํ๋๊ฒฝ์ฐ
select * from table where name = 'word' or idx = 5
name๊ณผ idx๊ฐ ๋๋ค ์ธ๋ฑ์ค๊ฐ ๊ฑธ๋ ค์๋ ๊ฒฝ์ฐ๋ผํด๋, DBMS๊ฐ ์ต์ ์ OR ์กฐ๊ฑด์ ๋ฝ๊ธฐ ํ๋ค์ด, FULL SCAN ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
5. Optimizer ์ ์ ํ
select * from table where name ='word' and id ='elky';
์ธ๋ฑ์ค๊ฐ name ๊ณผ id๋ก 2๊ฐ๊ฐ ์์ ๊ฒฝ์ฐ id๋ name ์ธ๋ฑ์ค ์ค ํ๋๊ฐ ์ ํ๋ ์๋ ์๊ณ , ๋๋ค ์ ํ ๋ ์๋์๋ค.
์ด๋ค ๋ฐฉ์์ผ๋ก ์ ํํ๋๋๊ฐ ์๋์ ์ค์ํ ์๋์๋ค. ์ฆ ์คํ ๊ณํ์ ์ถ์ ํด์ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค
์ถ์ฒ: http://elky.tistory.com/210 [์ํค์ ์ฃผ์ ์ฃผ์ ]๋ฐ์ํ'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ERD ๋ค์ด์ด๊ทธ๋จ, ํ๊ธฐ๋ฒ (0) 2021.01.10 MySql : ํ๋ก๊ทธ๋๋จธ์ค SQL ๊ณ ๋์ Kit ๋ต (0) 2020.07.29 MySQL : MySQL ๊ธฐ๋ณธ ๋ช ๋ น์ด ์ ๋ฆฌ (0) 2020.04.23 MySQL : MySQL 1045(28000) ์๋ฌ (0) 2020.04.23 MSSQL : SET NOCOUNT ON ์ฌ์ฉ ๋ชฉ์ (0) 2020.03.22