공부 63

BookMark LoopUp

USE Northwind; -- 북마크 룩업 -- Index Scan vs Index Seek -- Index Scan이 항상 나쁜 것은 아니고 -- Index Seek가 항상 좋은 것은 아니다. -- 인덱스를 활용하는데 어떻게 느릴 수 있을까? --NonClustered --Clustered --Heap Table -- Clustered의 경우 Index Seek가 느릴 수가 없다. -- NonClustered의 경우, 데이터가 Leaf Page에 없다. -- 따라서 한 번 더 타고 가야함 -- 1) RID -> Heap Table (Bookmark Lookup) -- 2) Key -> Clustered SELECT* INTO TestOrders FROM Orders; SELECT* FROM TestO..

INDEX SCAN vs INDEX SEEK

USE Northwind; -- 인덱스 접근 방식 (Access) -- Index Scan vs Index Seek CREATE TABLE TestAccess ( id INT NOT NULL, name NCHAR(50) NOT NULL, dummy NCHAR(1000) NULL, ); GO CREATE CLUSTERED INDEX TestAccess_CI ON TestAccess(id); Go CREATE NONCLUSTERED INDEX TestAccess_NCI ON TestAccess(name); GO DECLARE @i INT; SET @i = 1; WHILE(@I 실제 데이터를 찾기 위해 페이지 수 SET STATISTICS TIME ON; SET STATISTICS IO ON; -- INDEX..

Ground

오늘의 작업 - 게임상 땅을 만든다. - 땅 꼭지점 4개의 위치를 받아 저장한다. - 꼭지점의 기준으로 Grid를 생성한다. - 이 정보를 통해 길찾기를 몬스터가 가능하게 만든다. #1 그라운드 생성 Matrial은 AssetStore에서 무료로 받아 사용한다 Plan은 Gizmos 기준으로 2x2이므로 총 4개의 노드를 잡아 먹는다고 생각했을때, 가로 9 세로 19 Plan을 만들었다. 그러므로 Tower을 1x1로 만들었다고 가정하고 총 가로 18개, 세로 38개로 만들 수 있다. 이러한 가정이 맞을려면, 오브젝트에 대한 크기를 1x1로 고정하여 생성할 수 있어야한다. #2 땅 꼭지점 4개의 위치를 받아 저장한다. #3 꼭지점 기준으로 Grid를 생성한다. enum Vertex { LEFT_DOWN,..

Clustered VS Non-Clustered

USE Northwind; -- 인덱스 종류 -- Clustered(영한 사정) vs Non-Clustered(색인) -- Clustered -- Leaf Page = Data Page -- 데이터는 Clustered Index 키 순서로 정렬 -- Non-Clustered ? (사실 Clustered Index 유무에 따라서 다르게 동작) -- 1) Clustered Index가 없는 경우 -- Clustered Index가 없으면 데이터는 Heap Table이라는 곳에 저장 -- Heap RID -> Hwap Table에 접근 데이터 추출 -- 2) Clustered Index가 있는 경우 -- Heap Table이 없음. Leaf Table에 실제 데이터가 있따. -- Clustered Index의..

정렬 (버블 정렬, 선택 정렬, 삽입 정렬)

#include #include #include #include #include using namespace std; #include // 오늘의 주제 : 정렬 // 1_ 버블 정렬 (Bubble Sort) // 가장 처음부터 차례차례 다음 수와 비교하여 정렬한다. // 시간 복잡도 (N-1) + (N-2) + (N-3) ... +2+1 // = O(N^2) void BubbleSort(vector& v) { const int n = (int)v.size(); for (int i = 0; i v[j+1]) { int temp = v[j]; v[j] = v[j + 1]; v[j + 1] = temp; ..

데이터베이스 세부 인덱스 확인 및 복합 인덱스

인덱스 확인 USE Northwind; --DB 정보 살펴보기. --데이터에 대한 정보 (이름, 용량, 경뢰 등등) EXEC sp_helpdb 'Northwind'; -- 임시 테이블 만들기 (인덱스 테스트용) CREATE TABLE Test ( EmployeeIDINT NOT NULL, LastNameNVARCHAR(20) NULL, FirstNameNVARCHAR(20) NULL, HireDataDATETIME NULL ); GO INSERT INTO Test SELECT EmployeeID, LastName, FirstName, HireDate FROM Employees; SELECT * FROM Test; -- FILLFACTOR (리프 페이지 공간 1%만 사용) -- PAD_INDEX (FILL..

윈도우 함수

USE BaseballData; -- 윈도우 함수 -- 행들의 서브 집합을 대상으로, 각 행별로 계산을 해서 스칼라(단일 고정)값을 출력하는 함수 -- 느낌상 GROUPING이랑 비슷한가? -- SUM, COUNT, AVG 집계 함수 SELECT* FROM salaries ORDER BY salary DESC; SELECT playerID, MAX(salary) FROM salaries GROUP BY playerID ORDER BY MAX(salary) DESC -- 윈도우 함수 -- ~OVER([PARTITION] [ORDER BY] [ROWS]) -- 전체 데이터를 연봉 순서로 나열하고, 순위 표기 SELECT *, ROW_NUMBER() OVER (ORDER BY salaryDESC),-- 행#번..

TRANSACTION

특이사항 = 조직문화에 따라서 사용유무가 갈린다. /* TRANSACTION ALL OR NOTING 유저간의 거래 A의 인벤토리에서 아이템 제거 (제거가 안되고) B의 인벤토리에 아이템 추가 (추가가 되었을 경우) A의 골드 감소 강화는 일어났는데 무기강화가 연동되지 않아, 무기 강화는 안된것. 이런 문제점을 막기 위해 사용한다. BEGIN TRAN; COMMIT; ROLLBACK; EX) 메일 = BEGIN TRAN; 보낼것인가? = COMMIT; 취소할 것인가? = ROLLBACK; 성공 / 실패 여부에 따라 COMMIT(= COMMIT을 수동으로 하겠다.) */ ROLLBACK 적용하여도 ROLLBACK을 했기 때문에, COMMIT을 하지 않음. COMMIT 했을 경우는 데이터를 등록에 허가하므로..