본문 바로가기

전체 글38

[MSSQL] 인덱스 조각화/리빌드 인덱스 조각화는 데이터베이스에서 인덱스 내부의 데이터 페이지가 물리적으로 분산되어 저장되는 현상을 의미합니다. 이는 데이터베이스의 성능에 부정적인 영향을 미칠 수 있습니다. 인덱스는 데이터베이스에서 검색 작업을 빠르게 수행하기 위해 사용되는 구조로, 데이터의 논리적인 정렬 순서를 유지하고 검색 속도를 향상시킵니다. 그러나 데이터가 추가, 수정 또는 삭제되면 인덱스의 조각화가 발생할 수 있습니다. 인덱스 조각화는 주로 두 가지 형태로 나뉩니다. 1. 내부 조각화 (Internal Fragmentation): 내부 조각화는 인덱스 페이지 내에서 빈 공간이 발생하는 경우를 말합니다. 예를 들어, 인덱스 페이지에 데이터를 추가하거나 삭제하면 해당 페이지의 공간이 남을 수 있습니다. 이렇게 발생한 빈 공간은 검색.. 2023. 5. 2.
[MSSQL] 사용하지 않는 인덱스 확인하기 다음 쿼리를 사용해 사용되지 않고 있는 인덱스를 확인할 수 있다. 인덱스를 사용하지 않는데 인덱스 수정이 자주되어 DB에 부하를 준다면 정리할 수 있도록 하자. SELECT TOP 10 DatabaseName = DB_NAME() ,TableName = OBJECT_NAME(s.[object_id]) ,IndexName = i.name ,user_updates --유저 인덱스 쓰기 작업 수 ,system_updates --시스템 인덱스 쓰기 작업 수 FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id WHERE s.database_id = D.. 2023. 4. 24.
[프로그래머스] LV.5 상품을 구매한 회원 비율 구하기 (MySQL) https://school.programmers.co.kr/learn/courses/30/lessons/131534?language=mysql SELECT YEAR(B.SALES_DATE) AS YEAR, MONTH(B.SALES_DATE) AS MONTH, COUNT(DISTINCT(B.USER_ID)) AS PUCHASED_USERS, ROUND( COUNT(DISTINCT(B.USER_ID)) / ( SELECT COUNT(1) FROM USER_INFO WHERE JOINED 2023. 4. 21.
[MySQL] 날짜 더미데이터 만들기 WITH문 재귀를 사용하여 날짜 더미데이터를 만들 수 있다. WITH RECURSIVE A AS( SELECT 0 AS LEVEL UNION ALL SELECT 1+A.LEVEL FROM A WHERE A.LEVEL < ( SELECT DATEDIFF('2023-12-31', '2023-01-01') #종료날짜, 시작 날짜 ) ) SELECT ADDDATE('2023-01-01', INTERVAL LEVEL DAY) #시작날짜 FROM A; 위 쿼리를 실행하면 다음과 같은 결과를 조회할 수 있다. 서버에서 WITH를 사용할 수 없을 때 다음과 같은 방법으로도 날짜 더미데이터를 조회할 수 있다. (1년 후 날짜를 기준으로 9999일 이전 날짜까지만 조회가능) SELECT DATE_FORMAT(D.Date,.. 2023. 4. 18.
[백준] 17298 오큰수 (C++) 오른쪽에 있는 자신보다 큰 수 중에서 가장 왼쪽에 있는 수를 출력해주는 문제이다. #include #include using namespace std; int main() { int n; cin >> n; int arr[1000001]; int answer[1000001]; stack s; for(int i=0; i> arr[i]; answer[i] = -1; } for(int i=0; i 2023. 4. 18.
[프로그래머스] LV.3 숫자게임 (JAVA) A, B를 오름차순 정렬한 후 A[0] 부터 A[n-1] 까지 자기보다 큰 수 중 가장 작은 수를 차례대로 찾아간다. 만약 찾았다면 Index값+1 을 temp에 저장하고 B[temp] 부터 찾을 수 있도록 하였다. import java.util.Arrays; class Solution { public int solution(int[] A, int[] B) { int answer = 0, temp = 0; Arrays.sort(A); Arrays.sort(B); for(int i=0; i 2023. 4. 18.
[MSSQL] 특정 구간의 날짜 더미데이터 만들기 (with CTE) 특정 구간의 날짜 더미데이터가 필요한 경우 CTE를 사용하여 다음과 같이 만들 수 있습니다. DECLARE @start_time datetime = '20230401 00:00:00' --첫 날짜 DECLARE @end_time datetime = '20230401 23:00:00'; --마지막 날짜 DECLARE @time_diff int = 1; --설정할 시간 간격 WITH cte AS ( SELECT 0 AS n UNION ALL SELECT n + @time_diff FROM cte WHERE n < DATEDIFF(HOUR, @start_time, @end_time) -- HOUR 대신 다른 시간 단위 설정가능 ) SELECT DATEADD(HOUR, n, @start_time) FROM ct.. 2023. 4. 17.
[백준] 11000 강의실 배정 (C++) 사용하는 강의실을 최소화 해야하는 문제이다. 우선순위 큐를 2개 사용해서 pq1은 강의 시작시간을 입력하고, pq2는 강의 종료시간을 오름차순으로 입력하였다. 시작시간과 종료시간이 비교하여 강의 시작시간이 종료시간보다 작으면 강의실 하나를 추가하고 강의 시작시간을 pop 하였다. 만약 시작시간이 종료시간보다 크다면 강의를 이어 진행할 수 있는 수업이라고 판단되어 강의실을 추가하지 않고 강의 시작시간과 강의 종료시간을 모두 pop 하였다. pq1이 empty상태일 때 반복문을 종료하고 답을 출력하였다. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0);cin.tie(0); int n, temp, .. 2023. 4. 14.
[MySQL] UPSERT(UPDATE + INSERT) 쿼리 UPSERT 쿼리는 UNIQUE KEY값이 없으면 INSERT 있으면 업데이트를 실행하는 쿼리입니다. 예를들어 id필드가 유니크 키일때 다음과 같은 UPSERT 쿼리를 보냅니다. INSERT INTO TABLE (id, col1, col2) VALUES (1, '값1', '값2') ON DUPLICATE KEY UPDATE col1 = '값1', col2 = '값2' 만약 테이블에 id가 1인 값이 존재하지 않는다면 INSERT 쿼리로 처리되고, id가 1인 값이 존재한다면 UPDATE 쿼리로 처리됩니다. IF문을 사용한다면 SELECT를 통해 해당 값의 존재 여부를 체크 후 INSERT를 할지 UPDATE를 할지 결정하여야 합니다. 반면 UPSERT는 불필요한 조회를 줄이고 쿼리를 간결하게 표현할 수 .. 2023. 4. 13.
[프로그래머스] LV.3 거스름돈 (C++) n원의 거스름돈을 주는 경우의 수를 푸는 문제이다. 우선 0원일 때에 경우의 수 1을 입력한다. 그 후 금액별로 n원 까지 경우의 수를 구하는데 구하려는 금액에 거스름돈의 단위를 뺀 값의 dp값을 더해주면 된다. #include #include using namespace std; int solution(int n, vector money) { int dp[100000]; dp[0] = 1; for(int i=0; i 2023. 4. 12.
[MSSQL] 데이터베이스 용량 조회 쿼리 SELECT b.groupname AS 'File Group' , Name , [Filename] , CONVERT (Decimal(15,2),ROUND(a.Size/128.000,2)) [할당된 용량 (MB)] , CONVERT (Decimal(15,2) , ROUND(FILEPROPERTY(a.Name,'SpaceUsed')/128.000,2)) AS [사용중인 용량 (MB)] , CONVERT (Decimal(15,2) , ROUND((a.Size-FILEPROPERTY(a.Name,'SpaceUsed'))/128.000,2)) AS [사용가능한 용량 (MB)] FROM dbo.sysfiles a (NOLOCK) JOIN sysfilegroups b (NOLOCK) ON a.groupid = b.g.. 2023. 4. 7.
[NodeJS] NestJs MSSQL 연결하기 작업환경 : node v16.19.1, nest v9.2 npm에서 mssql, @types/mssql 패키지를 설치합니다. (typescript환경이 아니라면 @types/mssql은 설치안하셔도 됩니다. 저는 nestjs를 사용했기 때문에 설치했습니다.) npm i mssql @types/mssql 제가 설치한 버전입니다. "mssql": "^9.1.1", "@types/mssql": "^8.1.2", root에 dbconfig.ts 파일을 만들고 접속정보를 입력해줍니다. (※dbconfig.ts는 꼭 gitignore에 등록해서 git서버에 올라가지 않도록 주의합니다) //dbconfig.ts export const mssqlDbConfig = { user: 'USER', password: 'PAS.. 2023. 3. 24.
반응형