본문 바로가기
728x90
반응형

Database43

[MSSQL] MSSQL과 MySQL의 성능과 효율성 데이터 타입별 메모리 및 성능 분석문자열 저장 시, 타입 선택에 따라 저장 공간과 성능이 크게 달라집니다.VARCHAR (Latin1): ASCII 중심 데이터에 적합. 가장 빠르고 공간 효율적이나 한글 등 유니코드는 깨질 수 있음.NVARCHAR: UCS-2 방식으로 유니코드를 완전 지원하지만, 항상 2바이트 이상 사용하여 공간을 많이 차지함.VARCHAR + UTF8 Collation: MSSQL 2019+에서 지원. 가변 길이 저장이 가능하여 공간 효율적이며, 유니코드와 외부 시스템 연동에 강함.✔️ 정렬, LIKE 검색 성능은 ASCII 기반 VARCHAR가 가장 빠르고, NVARCHAR는 느린 편. UTF-8은 중간 정도 성능을 보임.JSON 처리 방식MySQLJSON 타입을 직접 지원함 (CR.. 2025. 5. 26.
[MSSQL] MSSQL과 MySQL의 트랜잭션, 프로시저, 트리거 기능 차이 MSSQL과 MySQL의 고급 문법 및 기능 차이트랜잭션 및 잠금트랜잭션은 데이터 무결성을 보장하기 위해 중요한 기능입니다. MSSQL과 MySQL 모두 트랜잭션을 지원하지만, 기본 설정과 동작 방식에 차이가 있습니다.MSSQL기본적으로 수동 커밋 모드.BEGIN TRAN, COMMIT, ROLLBACK을 사용하여 명시적으로 트랜잭션 처리.WITH (NOLOCK) 힌트를 통해 읽기 잠금 우회 가능.격리 수준은 SET TRANSACTION ISOLATION LEVEL로 설정 가능.MySQL기본적으로 자동 커밋 모드.START TRANSACTION, COMMIT, ROLLBACK을 사용.InnoDB 엔진에서만 트랜잭션 및 잠금 지원.LOCK IN SHARE MODE, FOR UPDATE를 통해 명시적 잠금 .. 2025. 5. 26.
[MSSQL] MSSQL 문자열 타입 MSSQL 문자열 타입 정리 및 사용 가이드문자열 타입 개요MSSQL에서 문자열 타입은 크게 VARCHAR, NVARCHAR, 그리고 UTF-8을 사용하는 VARCHAR(UTF8 Collation)으로 나눌 수 있습니다. 각 타입은 저장방식, 속도, 다국어 지원 등에서 차이가 있습니다.타입인코딩 방식주요 특징VARCHARANSI/DB Collation(Latin1 등 단일 바이트)가장 가볍고 빠름 (한글 등 유니코드 지원 제한)NVARCHARUCS-2(UTF-16 유사)유니코드 전용, 모든 언어 표현 가능, 항상 2바이트 이상 사용VARCHAR + UTF8 CollationUTF-8다국어 지원 + 공간 절약 (MSSQL 2019+)1. 메모리 사용량(저장 공간)각 타입에 따라 메모리 사용량이 달라지므로,.. 2025. 5. 26.
[MSSQL] MSSQL과 MySQL의 문법 및 기능 비교 페이징 처리 방식MSSQL에서는 TOP 또는 OFFSET FETCH를, MySQL에서는 LIMIT OFFSET을 사용합니다.-- MSSQLSELECT * FROM Users ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;-- MySQLSELECT * FROM Users LIMIT 10 OFFSET 10;조건문과 IF문MSSQL에서는 IIF() 함수를 사용할 수 있고, MySQL은 IF()를 사용합니다.-- MSSQLSELECT IIF(score > 60, 'Pass', 'Fail') FROM TestResults;-- MySQLSELECT IF(score > 60, 'Pass', 'Fail') FROM TestResults;변수 선언 및 활용변수 선언 방식도 .. 2025. 5. 26.
[MSSQL] MSSQL과 MySQL의 기초 문법 차이 정리 데이터베이스와 테이블 생성법 비교항목MSSQLMySQL자동 증가 (Auto Increment)IDENTITY(1,1)AUTO_INCREMENT문자열 기본 인코딩VARCHAR (기본 Latin1, 설정 가능)VARCHAR (기본 UTF-8 or 설정된 charset)MSSQL과 MySQL은 데이터베이스와 테이블을 생성할 때 다소 다른 문법을 사용합니다. MSSQL에서는 자동 증가를 IDENTITY(1,1)로 표현하며, MySQL에서는 AUTO_INCREMENT를 사용합니다.예시:MSSQLCREATE TABLE Users ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(100));MySQLCREATE TABLE Users ( id INT AUTO_INCREMENT.. 2025. 5. 26.
[1일1쿼리] 오늘이 생일인 사람이 각 부서마다 몇명인가 ? select right(e.birth_date,5) as 'birthDay' , d.dept_name, count(e.emp_no) as 'count'from employees as ejoin dept_emp as m on m.emp_no = e.emp_noleft join departments as d on d.dept_no = m.dept_nowhere right(e.birth_date,5)= substring(now(),6,5) and m.to_date = '9999-01-01'group by d.dept_namewith rolluporder by d.dept_name desc, e.emp_no asc; 2025. 1. 8.
[1일1쿼리] 현재 재직중인 Technique Leader 의 월급중 가장 높은 사람의 부서는? ## 현재 재직중인 Technique Leader 의 월급중 가장 높은 사람의 부서는?WITH RankedSalaries AS ( SELECT t.emp_no, t.title, t.from_date, s.salary, m.dept_no, ROW_NUMBER() OVER (ORDER BY s.salary DESC) AS rnk FROM titles AS t JOIN salaries AS s ON s.emp_no = t.emp_no JOIN dept_emp AS m ON m.emp_no = t.emp_no WHERE t.title = 'Technique Leader' AND s.to_date = '9999-01-01')SELECT R.emp_no, R... 2025. 1. 7.
[1일1쿼리] 현재 재직중인 Technique Leader 의 월급중 가장 높은 사람은? 내가 만든 쿼리 (Query Cost = 144233.44)SELECT t.emp_no, t.title, t.from_date, s.salary FROM titles AS tJOIN salaries AS s ON s.emp_no = t.emp_noWHERE t.title = 'Technique Leader' AND s.to_date = '9999-01-01' ORDER BY s.salary DESC LIMIT 1;  개선 쿼리1. ROW_NUMBER()를 활용한 서브쿼리(queryCost = 3.50)ROW_NUMBER()를 사용하면 정렬된 순서에서 가장 높은 값을 가진 직원만 빠르게 가져올 수 있습니다. 이는 특히 많은 데이터를 .. 2025. 1. 6.
[1일 1쿼리] 2일차 2000년 1월 의 부서별 평균 연봉중 가장 높은 부서는 ? 01/03일 select m.dept_no , d.dept_name, avg(s.salary) as '평균' from salaries as sjoin dept_emp as m on m.emp_no = s.emp_no join departments as d on d.dept_no = m.dept_noWHERE s.from_date = '2000-01-01' group by m.dept_no order by avg(s.salary) desc limit 1;   친구와 공유한 쿼리 사원 번호가 10007인 사원의 부서를 찾고 그 부서의 매니저의 이름을 출력하여라select e.last_name, e.first_name, dm.* from employees as e join dept_emp as m .. 2025. 1. 3.
[1일 1쿼리] 1일차 development부서에서 가장 높은 연봉을 받는 사람은? select s.emp_no , s.salary , e.first_name, e.last_name, e.gender from salaries as sjoin dept_emp as m on s.emp_no = m.emp_nojoin employees as e on e.emp_no = s.emp_nowhere m.dept_no = (select dept_no from departments as d where dept_name = 'Development') order by salary desc limit 1; 2025. 1. 3.
728x90
반응형