TIL 23.09.14

ν™©μ€ν•˜Β·2023λ…„ 9μ›” 14일
0

TIL

λͺ©λ‘ 보기
81/146

πŸ“ŒToday I Learned

였라클 μˆ˜μ—…

ex33_index

인덱슀, Index

  • 검색을 λΉ λ₯Έ μ†λ„λ‘œ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 도ꡬ
  • SQL λͺ…λ Ή 처리 속도λ₯Ό λΉ λ₯΄κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ, νŠΉμ • μ»¬λŸΌμ— λŒ€ν•΄ μƒμ„±λ˜λŠ” 도ꡬ
  • μ±… > λͺ©μ°¨ / 인덱슀(찾아보기) > 검색 도ꡬ

λ°μ΄ν„°λ² μ΄μŠ€

  • ν…Œμ΄λΈ” λ‚΄μ˜ λ ˆμ½”λ“œ μˆœμ„œκ°€ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μ •λ ¬ μƒνƒœκ°€ μ•„λ‹ˆλ‹€. > DBMSκ°€ 자체적 μ •λ ¬ 보관
  • μ–΄λ–€ 데이터 검색 > 처음 ~ λκΉŒμ§€ μ°¨λ‘€λŒ€λ‘œ 검색 > table full scan
  • νŠΉμ • 컬럼 선택 > λ³„λ„μ˜ ν…Œμ΄λΈ”μ— 볡사 > 미리 μ •λ ¬ >> 인덱슀
  • 원본 ν…Œμ΄λΈ” <= μ°Έμ‘° -> 인덱슀

인덱슀 μž₯단점

  • 처리 속도λ₯Ό ν–₯μƒμ‹œν‚¨λ‹€.
  • λ¬΄λΆ„λ³„ν•œ 인덱슀 μ‚¬μš©μ€ DB μ„±λŠ₯을 μ €ν•˜μ‹œν‚¨λ‹€.

μžλ™μœΌλ‘œ μΈλ±μŠ€κ°€ κ±Έλ¦¬λŠ” 컬럼

  1. Primary key
  2. Unique
  • ** ν…Œμ΄λΈ”μ—μ„œ PK μ»¬λŸΌμ„ κ²€μƒ‰ν•˜λŠ” 속도 >>> ν…Œμ΄λΈ”μ—μ„œ PK μ•„λ‹Œ μ»¬λŸΌμ„ κ²€μƒ‰ν•˜λŠ” 속도

μ‹œκ°„ 확인

set timing on;

SQL μ‹€ν–‰
1. Ctrl + Enter > κ²°κ³Ό > ν…Œμ΄λΈ”
2. F5 >Β Β Β Β Β Β Β Β Β Β > κ²°κ³Ό > ν…μŠ€νŠΈ -> μ—¬κΈ°μ„œλ§Œ κ°€λŠ₯

-- 인덱슀 없이 검색 > κ²½κ³Ό μ‹œκ°„ : 00:00:03.381
select count(*) from tblIndex where name = '졜민기';

-- 인덱슀 생성
create index idxName
    on tblIndex(name);

-- 인덱슀 검색 > κ²½κ³Ό μ‹œκ°„: 00:00:00.059
select count(*) from tblIndex where name = '졜민기';

인덱슀 μ’…λ₯˜

  1. 고유 인덱슀
  2. λΉ„κ³ μœ  인덱슀

  1. 단일 인덱슀
  2. 볡합 인덱슀

  1. ν•¨μˆ˜ 기반 인덱슀
-- 고유 인덱슀
-- : μƒ‰μΈμ˜ 값이 쀑볡이 λΆˆκ°€λŠ₯ν•˜λ‹€.
-- : PK, UNIQUE
create unique index idxName2 on tblIndex(name); -- 동λͺ…이인(X)
create unique index idxContient on tblCountry(continent);

-- λΉ„κ³ μœ  인덱슀
-- : μƒ‰μΈμ˜ 값이 쀑볡이 κ°€λŠ₯ν•˜λ‹€.
-- : 일반 컬럼
create index idxHometown on tblIndex(hometown);

-- 단일 인덱슀
-- : 컬럼 1개λ₯Ό λŒ€μƒμœΌλ‘œ λ§Œλ“  인덱슀
create index idxHometown on tblIndex(hometown);
drop index idxHometown;

select count(*) from tblIndex where hometown = 'μ„œμšΈ'; -- κ²½κ³Ό μ‹œκ°„: 00:00:00.920

select count(*) from tblIndex where hometown = 'μ„œμšΈ' and job = '학생'; -- κ²½κ³Ό μ‹œκ°„: 00:00:30.170 (μ„œμšΈλ§Œ ν¬ν•¨ν•˜μ—¬ λ§Œλ“  μΈλ±μŠ€κ°€ λ¬΄μš©μ§€λ¬Ό)

-- 볡합(κ²°ν•©) 인덱슀
-- : 컬럼 N개λ₯Ό λŒ€μƒμœΌλ‘œ λ§Œλ“  인덱슀
create index idxHometownJob on tblIndex(hometown, job);

select count(*) from tblIndex where hometown = 'μ„œμšΈ' and job = '학생'; -- μˆœμ„œλŠ” 상관 μ—†μŒ
select count(*) from tblIndex where job = '학생' and hometown = 'μ„œμšΈ';

select count(*) from tblIndex where hometown = 'μ„œμšΈ';

select count(*) from tblIndex where job = '학생';

--> 인덱슀둜 묢인 컬럼과 λ™μΌν•˜κ²Œ κ²€μƒ‰ν•΄μ•Όν•œλ‹€. κ·Έλž˜μ•Ό μΈλ±μŠ€κ°€ μ†Œμš©μžˆλ‹€.


-- κ²½κ³Ό μ‹œκ°„: 00:00:04.392
select count(*) from tblIndex where substr(email, instr(email, '@')) = '@naver.com';

create index idxEmail on tblIndex(email);
drop index idxEmail;

create index idxEmail on tblIndex(substr(email, instr(email, '@'))); -- κ°€κ³΅ν•˜λ©΄ κ·ΈλŒ€λ‘œ 컬럼 μžλ¦¬μ— λ„£κΈ°

μƒˆ 계정 생성

admin κ³„μ •μœΌλ‘œ λ“€μ–΄κ°€μ„œ ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‹€ν–‰ν•œ λ’€ 계정을 μƒμ„±ν•˜λ©΄ λœλ‹€.
μƒˆλ‘œμš΄ κ³„μ •μ˜ 이름과 λΉ„λ°€λ²ˆν˜Έλ₯Ό μ„€μ •ν•˜κ³ , κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” μž‘μ—…μ΄λ‹€.

create user eeunha identified by java1234;

grant connect, resource, dba to eeunha;

DB ν”„λ‘œμ νŠΈ

λͺ¨λ“  ν…Œμ΄λΈ”μ— 데이터λ₯Ό λ„£κΈ° μœ„ν•˜μ—¬ DML을 μ™„μ„±ν•˜μ˜€κ³ , μ‹€ν–‰ν•˜μ—¬ ν…Œμ΄λΈ” μ•ˆμ— 데이터λ₯Ό λ‹€ λ„£μ—ˆλ‹€.

개인 λ…ΈνŠΈλΆμ—λ„ ν”„λ‘œμ νŠΈ μž‘μ—…μ„ ν•  수 있게 개인 μ„œλ²„λ₯Ό μƒμ„±ν•˜μ˜€κ³ , 우리 νŒ€μ΄ μž‘μ„±ν•œ DDLκ³Ό DML을 λͺ¨λ‘ λͺ¨μ•„ ν•œλ²ˆμ— μ‹€ν–‰ν•˜κΈ° νŽΈν•˜λ„λ‘ κ°„λ‹¨ν•œ 파일둜 μΆ”ν•©ν–ˆμœΌλ©°, ν•΄λ‹Ή νŒŒμΌμ„ μ‹€ν–‰ν•˜μ—¬ 개인 μ„œλ²„μ— ν”„λ‘œμ νŠΈ 개발 ν™˜κ²½μ„ κ΅¬μΆ•ν•˜μ˜€λ‹€.

λ‚˜λŠ” ꡐ사 κΈ°λŠ₯을 λ§‘μ•˜κΈ° λ•Œλ¬Έμ— 이제 μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•  λ•Œ λ°œμƒν•˜λŠ” 쿼리듀을 κ΅¬μƒν–ˆλ‹€. ansi-sql, pl/sql

profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€