분류 전체보기

카테고리 없음

MSSQL EXISTS 구문의 서브 쿼리 평가

-- 테스트 테이블 세팅 CREATE TABLE Test1 ( uidBIGINT CONSTRAINT PK_TEST1 PRIMARY KEY (uid) ) CREATE TABLE Test2 ( uidBIGINT, scoreBIGINT, CONSTRAINT PK_TEST2 PRIMARY KEY (uid) ) INSERT INTO Test1 VALUES (1) INSERT INTO Test1 VALUES (2) INSERT INTO Test2 VALUES (1, 0) -- Test2에 uid가 존재하는 uid만 출력하기. SELECT * FROM dbo.Test1 AS A WHERE EXISTS ( SELECT 1 FROM dbo.Test2 AS B WHERE A.uid = B.uid ) MSSQL에서 사용하는..

Programming/MSSQL

MSSQL 특정한 값 제외 평균

개요 Invalid한 값 0을 제외한 값들로 평균을 내고 싶어졌다. 그럴땐 IFNULL을 사용하면 된다. 본론 -- 테스트 테이블 세팅 CREATE TABLE Test1 ( uidBIGINT, scoreBIGINT, CONSTRAINT PK_TEST1 PRIMARY KEY (uid) ) GO INSERT INTO dbo.Test1 VALUES (1, 1) INSERT INTO dbo.Test1 VALUES (2, 5) INSERT INTO dbo.Test1 VALUES (3, 3) INSERT INTO dbo.Test1 VALUES (4, 0) INSERT INTO dbo.Test1 VALUES (5, 0) INSERT INTO dbo.Test1 VALUES (6, 0) INSERT INTO dbo.Te..

Programming/MSSQL

MSSQL 데드락 그래프

MSSQL에서 데드락 그래프를 뽑는 방법을 기록한다. 1. SSMS를 이미 설치해 놨다면, 아마도 깔려 있을 SQL Server Profiler 18을 실행한다. 2. [파일] -> [새 추적]을 누른다. 3. 접속 정보를 확인하고 연결 한다. 4. [이벤트 선택] -> [Locks] -> [Deadlock graph]를 체크한 다음 [실행]을 누른다. 5. 아래와 같이 창이 떴다면 이제 데드락을 일으켜 보자. -- 테스트 테이블 세팅 CREATE TABLE Test1 ( uid BIGINT, item1 Varchar(10), item2 Varchar(10), item3 Varchar(10), CONSTRAINT PK_TEST1 PRIMARY KEY (uid) ) GO INSERT INTO dbo.Tes..

Programming/MSSQL

MSSQL 페이지 위치 쿼리

작업 중에 MSSQL에서 현재 데이터가 어떤 페이지(물리적 페이지)에 있는지 알아야 하는 일이 있었는데, 그때 사용한 쿼리들을 정리하였다. 1. 테이블의 Page 현황 조사 쿼리 SELECT DB_NAME(PA.database_id) [DataBase], OBJECT_NAME(PA.object_id) [Table], SI.Name [Index], is_allocated, allocated_page_file_id [file_id], allocated_page_page_id [page_id], page_type_desc, page_level, previous_page_page_id [previous_page_id], next_page_page_id [next_page_id] FROM sys.dm_db_dat..

Programming/MSSQL

MSSQL 한번에 여러 row 빠르게 넣기

MSSQL에서 row을 임의로 삽입할 때, 가장 쉽게 생각할 수 있는 루프 문을 사용하는 방법으로 하면 몇천만 건씩 넣을 경우 매우 매우 느리다. 그래서 아래와 같은 방법으로 쿼리를 넣으면 꽤나 대량의 row도 순식간에 넣을 수 있다. -- 1000000 개의 순차적인 uid의 row를 넣는 쿼리. INSERT INTO [dbo].[Test1] SELECT TOP (1000000) Id = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id])), 1, 2, 3 FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2

Programming/C# & Unity

C# static 멤버 함수

개요 static 멤버 함수를 어떨 때 사용하면 좋은지 공유하기 위하여 포스팅하였다. 일반적인 사용처 class TestClass { private static int initCount = 0; public TestClass() { Interlocked.Increment(ref initCount); } public static void PrintInitCount() { Console.WriteLine(initCount); } } TestClass.PrintInitCount(); 제일 많이 쓰는 방법. 한 클래스의 범 인스턴스적으로 공용하여 쓰는 static 멤버 변수를 외부 클래스에서 사용하거나 해야 할 때 위와 같이 static 멤버 변수를 많이 쓴다. this를 사용하지 않는 멤버 함수 알리기 cla..

Programming/C# & Unity

C# Async Await 원리

개요 전에는 그냥 대충 [Async 함수를 호출하면 ThreadPool에서 Task를 하나 꺼내서 함수를 던져주겠지~]라고 생각했었다. 하지만 현실은 물론 그렇지 않았으며, 내부에서 신기하고 재미있는 일이 일어나고 있어서 포스팅을 남기려 한다. 예제 static class DBExecutor { static public async Task ExecuteDB(string spName, long accountId) { string result; Console.WriteLine($"DB 연결 시작"); await Task.Delay(2000); Console.WriteLine($"{spName} 호출 시작."); await Task.Delay(2000); Console.WriteLine($"{spName} 호..

Programming/C# & Unity

C# Enum Flag

Item에 대한 속성(버리기 가능, 사용 가능, 장착 가능, 강화 가능)을 하나의 변수에다가 담고 싶다. 그럴땐 Enum을 사용하여 Flag 연산을 통해 작업을 하는 것이 편하고 싸다. 이렇게 Enum을 정의하여 나는 포션이라는 타입에다가 Deletable과 Usable 속성을 합쳐서 하나의 변수에 담을 수 있게 되었다. 플래그를 꺼내서 사용할 때에는 위와 같은 방식으로 사용하는게 예쁘다. 여기서 궁금한 내용이 ~0가 뭔가? 싶었는데, 물결표 연산자는 이진수 값을 모두 뒤집은 것. 즉 0의 이진수 값은 00000000..인데 이를 뒤집은 뒤집은 11111111... 이며 값은 -1이다. 그래서 모든 Flag 연산에 or을 걸어도 True를 내뱉을 수 있는 All로써 제격인 값. 다른 방법으로는 Int.M..

Programming/C# & Unity

C# DateTime.Now 속도

개요 개발 중 퍼포먼스 측정을 위하여 소요 시간을 아주 잦게 해야하는 로직이 있었다. 이때 제일 익숙하게 사용하는 DateTime.Now를 사용하면 느리지 않을까 싶어서 알아 보았다. 요약 DateTime.Now > StopWatch > DateTime.UtcNow 순으로 무거우니 빠른 계산은 UtcNow를 사용하고, 정밀 계산이 필요하면 StopWatch를 사용하자. 내용 1. DateTime.UtcNow UtcNow쪽을 살펴보면 단순히 SystemTime을 가져오는 것이 전부 인것으로 보인다. 2. StopWatch StopWatch는 HighResoulution이 켜져있다면 좀 더 무겁고 정밀한 계산을 하고, 그게 아니라면 위의 UtcNow를 사용한다. 하지만 대부분의 경우 QPC가 깔려있어서 QP..

Programming/C# & Unity

C# discards (안쓰는 out var , 안쓰는 tuple 숨기기)

C#에서 Parameter를 Out으로 받지만 호출자는 사용할 필요 없는 경우가 존재한다. public void Main() { string str = "abc"; if (int.TryParse(str, out var intResult) == false) // intResult는 쓸모가 없음. { Console.WriteLine("이것은 int 다."); return; } if (float.TryParse(str, out var floatResult) == false) // floatResult는 쓸모가 없음. { Console.WriteLine("이것은 float 이다."); return; } Console.WriteLine("Parse가 가능하다."); } 위와 같은 경우 intResult나 floa..

장형이
'분류 전체보기' 카테고리의 글 목록 (2 Page)