ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 [์—˜ํ‚ค์˜ ์ฃผ์ ˆ ์ฃผ์ ˆ]

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.