탱크/회고

[회고록] 전지적 분석가 시점 - MSSQL이 싫은 이유

sseozytank 2024. 7. 23.

2024-07-22 즈음 

 

Jira DB를 활용해서 리소스 관리의 효율성을 증대시키는 업무(분석,시각화 등)를 진행하고 있는데, 사내 DB라던지 이런 Atlassiaan DB라던지 다 SQL Server로 되어있어서 MSSQL을 사용해야하는데 여간 불편한게 아니다! 하지만 게임회사 대부분이 쓰기 때문에 절이 싫다고 중이 떠날 수 없는법. 

 

엔지니어링 측면을 전혀 고려하지 않은 전지적 분석가 시점⭐에서의 꿍시렁이다. 


1.GROUP BY 에서 인덱스 번호 사용이 안된다.

이게 왜 라고 할 수 있는데 아래처럼 GROUP BY 절이 너무 길어져..!!!

--bigquery 
SELECT CASE WHEN a=1 THEN 'b' 
	        WHEN a=2 THEN 'c' 
            WHEN a=3 THEN 'd' END AS a,
       COUNT(a) AS cnt 
  FROM table 
 GROUP BY 1 
 
 --MSSQL 
SELECT CASE WHEN a=1 THEN 'b' 
	        WHEN a=2 THEN 'c' 
            WHEN a=3 THEN 'd' END AS a,
       COUNT(a) AS cnt 
  FROM table 
 GROUP BY CASE WHEN a=1 THEN 'b' 
	        WHEN a=2 THEN 'c' 
            WHEN a=3 THEN 'd' END

 

2.CONVERT가 귀찮다. 

이건 MSSQL의 단점이라기 보단 postgresql이나 bigquery가 너무 잘되어있다. 

--bigquery 
SELECT DATE(date_col) 
  FROM table 
 
--postgres 
SELECT date_col::date 
  FROM table 

 --MSSQL 
CONVERT(DATE,date_col) 
  FROM table

 

3.서브 쿼리에 대한 식별자를 반드시 붙혀줘야함

다른 데이터베이스를 썼을 땐 서브쿼리에 AS 로 명명을 하지 않아도 오류가 뜨지 않았던 것 같은데, 바로 구문 에러를 때려버린다. 

--bigquery 
SELECT *
  FROM (SELECT * FROM table)
 
 --MSSQL 
SELECT *
  FROM (SELECT * FROM table) f0

4.ntext 형식의 존재 

문자열 데이터가 가끔 nvarchar가 아닌 ntext형식으로 들어오는데, 이 골때리는 자식은 연산도 안되고 replace,distinct도 안된다. CONVERT(nvarchar,ntext_col)로 변환해줘야 사용 가능, 당연히 엔지니어링적인 부분에서 반드시 필요한 존재지만 전지적 분석가 시점인 지금 이 포스팅에선 싫다 우하하 

 

VARCHAR vs TEXT

개요

medium.com

 


사용하면서 꿍시렁댔던 부분은 더 많았던 것 같은데, 막상 작성하려니 몇 개 생각나지 않는다.

 

이 글을 굳이 쓰는 이유는 아래와 같이 두가지로 정리할 수 있다. 

1.첫 입사 때 postgreSQL로 시작해서 그것밖에 쓸 줄 몰랐던 내가 여러 데이터베이스의 쿼리 형태를 비교할 수 있는 사람이 되었다는 사실이 뭔가 뿌듯해서 기록으로 남겨두고 싶었고,

2.나중에 내가 엔지니어링 스킬을 갖추게 되었을 때 이 글을 보면 이건 다 필요한 이유가 있었던거야 라는걸 느끼고 싶었다. 

 

그럼 오늘의 꿍시렁은 이만 끝! 

 

 

댓글