자주 반복적으로 사용되는 쿼리를 함수로 만들어서 SQL 실행 비용을 줄이고 네트워크 부하도 줄여준다
대표적인 예로 페이징 쿼리가 있습니다.
<옵티마이저가 SQL을 분석 후 실행가능한 코드로 변환>하는 데에 드는 비용을 줄일 수 있다
→ SQL 서버 성능 향상
& 재사용성
하나의 요청으로 여러 SQL문을 실행할 수 있어 데이터 전송량이 줄어 네트워크 부하
를 줄일 수 있음
쿼리 변경시 SP파일만 바꿔주면 된다 → 유지보수
가 용이
접근 권한을 테이블 전체가 아닌 SP단위로 부여할 수 있기때문에 보안
이 강화된다
파싱 (구문 분석 -> 개체 이름 확인 -> 사용 권한 확인) -> 최적화 -> 컴파일 및 실행계획 등록(캐시) -> 실행
일반 쿼리가 캐싱
되는 것(쿼리문이 완전히 일치해야함)과는 다르게 SP는 같은 로직에서 값만 변경해서 함수처럼 사용할 수 있어 값이 변경되어도 캐싱된 SP를 사용할 수 있다
각 쿼리에 최적화되지 않은 실행계획
문자 및 숫자 연산이 java/c 보다 느리다
데이터 분석이 어렵다
DB확장이 어렵다❓
https://devkingdom.tistory.com/323
https://pangtrue.tistory.com/196
https://velog.io/@sweet_sumin/%EC%A0%80%EC%9E%A5-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80-Stored-Procedure
쿼리 성능과 데이터베이스 속도를 향상시키는 데 도움이 되는 인덱스 수집을 강화하는 프로세스
인덱스 헌팅을 사용하면 인덱스 및 테이블에 대한 관찰을 통해 각 경우에 맞는 DB성능 향상 방법을 통해 옵티마이저를 사용하거나 인덱스와 쿼리 분포도의 성능을 체크하고 데이터베이스 튜닝을 하는 등의 방법을 사용함으로써 쿼리 성능을 향상시킬 수 있습니다
https://www.ambitionbox.com/interviews/mphasis-question/dbms-question-how-does-index-hunting-help-in-improving-query-performance-jv7MeX2l?campaign=company_interview_page_view_answer
https://www.glassdoor.co.in/Interview/How-does-Index-hunting-help-in-improving-query-performance-QTN_2216104.htm
1:1, 1:다, 다:다 관계가 있습니다
1:1은 하나의 테이블이 다른 하나의 테이블과 1:1로 연결된 경우를 말하며 유저와 유저 프로필의 관계가 이에 해당됩니다
1:다는 하나의 테이블이 다른 하나의 테이블에 해당하는 객체를 여러개 가질 수 있는 경우를 말합니다. 유저와 게시물/댓글의 관계가 이에 해당됩니다.
다:다는 하나의 테이블에서 나온 여러 객체가 다른 테이블의 여러 객체와 연결되어있는 경우입니다. 각 테이블의 입장에서 1:다 관계로 생각할 수 있습니다. 좋아요/ 팔로우 기능이 이에 해당됩니다.
장고에서는 MTM필드 생성시 스루테이블이 자동 생성되고, SQL에서는 JOIN테이블을 만들어 관리합니다
https://itwiki.kr/w/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EA%B4%80%EA%B3%84_%EC%9C%A0%ED%98%95
https://velog.io/@gillog/DB-11-1N-NM-%EA%B4%80%EA%B3%84
RDBMS
행(Column)과 열(Row)로 표현되는 테이블간의 관계를 나타낼 때 사용되며, 이렇게 표현된 데이터베이스는 SQL을 통하여 관리 및 접근
NoSQL
대용량 데이터를 다루거나 데이터 분산 처리에 용이. 유연한 데이터 모델링이 가능. Cloud Computing에 적합
- Document방식 : Json, XML과 같은 Collection 데이터 모델 구조 사용
- Key - Value 방식 : Key와 Value의 데이터가 쌍으로 저장되는 가장 단순한 데이터 모델 구조 사용
- Big Table DB : Key-Value 형에서 발전된 형태인 Column Family 데이터 모델 구조 사용
계층형 데이터베이스 : 데이터간의 관계가 트리 구조인 데이터 모델 사용
네트워크형 데이터베이스 : 데이터간의 다양한 관계가 그물망과 같은 모델 사용
https://honeyteacs.tistory.com/19
https://quizlet.com/kr/587074023/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-db-flash-cards/
https://velog.io/@gillog/DB-11-1N-NM-%EA%B4%80%EA%B3%84
# https://school.programmers.co.kr/learn/courses/30/lessons/60058
# 균형잡힌 괄호 문자열: '(' 의 개수와 ')' 의 개수가 같다
# 올바른 괄호 문자열: '('와 ')'의 괄호의 짝도 모두 맞을 경우
def check(u):
stack=[]
for uu in u:
if uu=='(':
stack.append(uu)
else:
if not stack:
return False
stack.pop()
return True
def solution(p):
if not p:
return ''
p_open,p_close=0,0
for i in range(len(p)):
if p[i]=='(':
p_open+=1
else:
p_close+=1
if p_open == p_close:
u,v= p[:i+1],p[i+1:]
break
if check(u):
return u+solution(v)
else:
answer='('+solution(v)+')'
for uu in u[1:len(u)-1]:
if uu == '(':
answer += ')'
else:
answer += '('
return answer
u,v= p[:i+1],p[i+1:]
이 부분에서 break를 걸어주지 않으면 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 한다는 조건에 위배됨