본문 바로가기

반응형

개발/DB

(12)
[mssql] 인덱스 개념 인덱스 : 색인과 같은 개념 수억 건의 데이터에서 인덱스가 없이 전체 데이터를 스캔해서 찾는거는 sql server 입장에서 부담스러운 일이다. 인덱스가 없이 조회 실행 계획 - 테이블 스캔 (전체 테이블 검색) 인덱스를 사용할 경우 실행 계획 - Index Seek (인덱스를 사용함) 인덱스 장점 - 검색 속도 향상된다. 튜닝 즉각적인 효과를 내는 방법 - 쿼리의 부하를 줄인다. - 시스템 성능 향상 된다. 인덱스 단점 - 인덱스가 데이터베이스 공간을 차지해서 데이터베이스 크기의 10% 정도의 추가 공간이 필요하다. - 처음 인덱스를 생성하는 데 시간이 많이 소요될 수 있다. - 데이터의 변경 작업(insert, update, delete)이 자주 일어날 경우에는 오히려 성능이 많이 나빠질 수 있다. ..
[mssql] 문자 데이터 형식 char, varchar, nchar, nvarchar 차이점 CHAR[(N)] 고정길이 문자형 NCHAR[(N)] 글자 0~4000자. 유니코드 고정 길이 문자형 VARCHAR[(N | MAX)] 가변 길이 문자형. N을 사용하면 1~8000까지 크기를 지정 가능, MAX로 지정하면 최대 2GB크기를 지정 가능 NVARCHAR[(N | MAX)] 유니코드 가변 길이 문자형. N을 사용하면 1~4000까지 크기를 지정 가능, MAX를 지정하면 최대 2GB크기를 지정 가능 BINARY[(N)] 고정길이의 이진 데이터 값 VARBINARY[(N | MAX)] 가변길의이 이진 데이터 값. N을 사용하면 1~8000까지 크기를 지정 가능, MAX로 지정하면 최대 2GB크기를 지정 가능. 이미지/동영상 등을 저장하기 위해 사용된다. CHAR 형식은 고정길이 문자형으로 자릿수..
[mssql] 테이블 복제 쉽게 하기 SELECT.. INTO .. SELECT .. INTO 문을 사용하여 테이블 정의를 생략하고 만들 수 있다.원하는 데이터만 따로 테이블을 복제 하고 싶다면. FROM 아래 WHERE 조건 절을 주고 사용 가능하다. 1234USE tempdb;SELECT BusinessEntityID as id, FirstName as fname, LastName as lnameINTO testTableFROM AdventureWorks.Person.Person;Colored by Color Scriptercs
[mssql] 값 자동 증가 identity, 시퀀스(sequence) 생성과 사용법 identity는 해당 열이 자동으로 값이 증가하도록 설정 할 수 있다. CREATE TABL]E ( [컬럼명] [숫자데이터형식] IDENTITY ([초기값], [증가값]) [제약조건] ) 컬럼 추가 시 ALTER TABLE [테이블명] ADD [컬럼명] [숫자형 데이터형식] IDENTITY ([초기값], [증가값]) [제약조건] 1씩 자동으로 증가 하는 테이블 만들기 ( INSERT 문에서 생략 가능) CREATE testTable ( id int IDENTITY, name); GO INSERT INTO testTable values('이름');​ IDENTITY에 원하는 값을 직접 입력 하고 싶을때 *주의사항 IDENTITY_INSERT를 ON으로 변경한 테이블은 입력할 열을 꼭 지정해줘야 한다. 생..
[mssql] WITH 절 , 비재귀적 CTE WITH 절은 CTE(Common Table Expression)을 표현하기 위한 구문이다. CTE는 기존 뷰, 파생테이블, 임시 테이블 들으로 사용되던 것을 대신 할 수 있으며, 더 간결한 식으로 보여지는 장점이 있다. 비재귀적 CTE, 재귀적 CTE 두가지가 있다. 비재귀적 CTE 단순한 형태이며, 복잡한 쿼리문장을 단순화시키는 데에 적합하게 사용될 수 있다. 사용법 WITH CTE_테이블이름(열이름) AS( ) SELECT 열이름 FROM CTE_테이블이름 ; ​ WITH AAA(열이름) AS( AAA쿼리문), BBB(열이름) AS ( BBB쿼리문), CCC(열이름) AS (CCC쿼리문), SELECT * FROM [AAA OR BBB OR CCC] 테이블에서 총구매액을 구하여 정렬하고 싶을때 실제..
[mssql] ROLLUP() 그룹별 합계 구하기, GROUPING_ID() 사용법 1 2 3 select num, groupname, sum(price * amount) as '비용' from buyTb1 group by ROLLUP(groupname, num); cs 중간 NULL로 되어 있는 것이 각 GROUPNAME 별 소 합계를 의미한다. 마지막은 소합계의 합계, 즉 총합계가 나왔다. 1 2 3 4 select groupname, sum(price * amount) as '비용' from buyTb1 group by rollup(groupname); Colored by Color Scripter cs GROUP BY에서 그룹이름으로 묶어주면 각 그룹 별 소합계, 총 합계만 볼 수 있다. 1 2 3 4 select groupname, sum(price * amount) as '비..
[mssql] GROUP BY / HAVING 사용법 GROUP BY- 그룹별로 묶어주는 역할을 한다.- 집계함수에 사용되는 컬럼은 GROUP BY절에 없더라도 사용가능하다.- 집계함수에 사용되지 않는 컬럼은 GROUP BY 절과 SELECT 절에 함께 써줘야 한다. PersonType별로 묶어보자 묶어준 PersonType별로 ID 수를 알고 싶을 때 -- 집계함수 사용 (count) ** 집계 함수 **AVG() 평균 MIN() 최소값 MAX() 최대값COUNT() 행의 개수 STDEV() 표준편차 VAR() 분산 SUM() 합계 ** 주의사항 ** GROUP BY 없이 별도의 열을 집계 함수와 같이 사용할 수 없다. 가장 큰 키와 가장 작은 키의 회원 이름과 키를 출력 하고 싶다면 ? 아래와 같이 작성 시 오류가 나온다. 1SELECT name, MI..
[mssql] 중복제거 DISTINCT 사용법 DISTINCT 는 중복된 것을 1개만 출력한다. 사용법 : 1SELECT DISTINCT AGE From USER;cs 결과: 해당 테이블의 age중 중복된 값을 제거하고 1개씩만 보여준다. AGE 1 25 2 26 3 27 4 29

반응형