SQL Server에서 WITH 명령어는 Common Table Expressions (CTE)를 정의하는 데 사용됩니다. CTE란 복잡한 쿼리를 단순화하거나 쿼리 내에서 여러 번 재사용하기 위해 사용하는 일시적인 결과 세트를 의미합니다. CTE를 사용하면 복잡한 쿼리를 분리해서 쿼리를 가독성 있게 짤 수 있는 장점이 있습니다. WITH 사용 구문 WITH CTE_Name (Column1, Column2, Column3, ...) AS ( -- CTE 정의, 여기에 SELECT 문을 사용하여 데이터를 추출합니다. SELECT Column1, Column2, Column3, ... FROM SomeTable WHERE SomeCondition ) -- 이후 CTE_Name을 참조하여 쿼리를 작성합니다. S..
MYSQL 사용 중 쿼리 성능이 시스템 리소스 대비 나오지 않는다면 innodb_buffer_pool_size 문제일 수 있습니다. innodb_buffer_pool_size는 MariaDB, MYSQL에서 테이블의 데이터와 인덱스를 캐시하기 위한 버퍼 풀의 크기를 지정하기 때문에 이 값이 필요한 수준 대비 낮으면 성능이 떨어질 수 있는 것입니다. innodb_buffer_pool_size 버퍼 풀은 데이터베이스 서버의 성능에 큰 영향을 미칠 수 있습니다. 버퍼 풀이 크면 데이터베이스의 많은 데이터와 인덱스가 메모리에 적재될 수 있어 디스크 I/O가 줄고 데이터 접근 속도가 빨라집니다. 버퍼 풀이 너무 작으면 데이터와 인덱스의 일부만 메모리에 적재되어 더 많은 디스크 I/O가 발생하고 성능이 저하될 수 ..
SQL Server GO GO는 SQL Server에서 일반적으로 사용되는 배치 구분자입니다. 배치 구분자는 여러 T-SQL(표준 SQL에서 확장된 기능을 제공하는 SQL) 명령어를 서로 다른 배치로 나누는 데 사용되는 문자나 문자열을 말합니다. 간단히 말해 배치는 여러 SQL 명령어의 그룹이고, GO는 그 명령어들을 구분하는 데 사용되는 구분자 역할을 합니다. 예시를 보면서 GO를 어떤 상황에서 쓸 수 있는지 확인해보겠습니다. 예시) 변수 변위 제한 중간에 GO로 구분자를 넣으면 그 아래로 실행되는 쿼리에서는 설정한 변수를 인식하지 않도록 할 수 있습니다. DECLARE @MyVar INT SET @MyVar = 10 SELECT @MyVar GO SELECT @MyVar 예시) DDL과 DML 분리 ..
PostgreSQL의 성능이 좋지 못하다고 판단이 들 때 최대 사용 가능한 메모리를 늘려서 성능 향상을 노려볼 수 있습니다. PostgreSQL에서 수정할 수 있는 메모리 설정들은 여러 가지입니다. 상황에 맞게 메모리를 수정하시면 됩니다. PostgreSQL 메모리 설정 1. shared_buffers shared_buffers는 PostgreSQL 서버 프로세스 간에 공유되는 메모리 버퍼의 크기를 지정합니다. 주로 데이터베이스의 테이블 및 인덱스 데이터를 캐싱하는 데 사용됩니다. 데이터베이스의 전반적인 성능에 영향을 주는 설정 값입니다. RAM이 충분한 시스템에서 이 값을 증가시키면, 더 많은 데이터를 메모리에 캐싱할 수 있어 디스크 I/O를 줄일 수 있습니다. [현재 설정 확인] SHOW shared..
테이블에서 임의로 데이터를 삭제해야 하는 상황이 있습니다. 특정 행이 문제가 되서 서비스 전체에 영향을 준다거나, 불필요한 정보를 삭제하고 싶다거나 하는 때 등에 그럴 수 있습니다. 그럴 때 그냥 데이터를 날리기는 꺼림직하기 때문에 백업을 만들어두는 게 좋습니다. 이때 수정하는 테이블을 통째로 백업하는 방법을 쓸 수 있습니다. SQL Server에선 SELECT * INTO ~ 구문을 이용합니다. SQL Server 테이블 백업 구문 SELECT * INTO [백업테이블명] FROM [원본테이블명]; 예시) 예시로 보겠습니다. org_table 이라는 이름으로 테이블을 만들고 임의의 값을 넣겠습니다. org_table을 backup_table 이름으로 백업하려면 아래와 같이 사용합니다. SELECT * ..
SQL Server에서 데이터베이스를 사용하다보면 .mdf, .ldf 파일의 용량이 계속 늘어납니다. 이 데이터 파일은 DB에서 데이터를 DELETE하는 이벤트가 발생해도 디스크에서 차지하는 용량이 다시 줄어들지 않습니다. 이럴 때 SHRINK 작업을 통해 불필요한 용량을 다시 회수할 수 있습니다. DBCC SHRINK 기본 구문을 아래와 같습니다. ldf, mdf 파일에 대해서 각각 shrink 작업을 할 수도 있고, 두 개 파일의 용량을 동시에 줄일 수도 있습니다. 1. 전체 데이터베이스(ldf, mdf) 크기 축소 USE [YourDatabaseName]; GO DBCC SHRINKDATABASE(YourDatabaseName, 10); -- 10은 남길 프리 스페이스의 대략적인 백분율입니다. GO..
리눅스에서 .sql 파일을 실행하여 mysql 데이터베이스에 쿼리 할 수 있습니다. mysql에 접속하고 source [sql 파일 경로]로 입력하면 됩니다. 만약 파일이 여러 개면 ;로 이어서 쓰면 됩니다. source [파일.sql]; sourrce [파일2.sql]; … 처럼요. 하지만 이 방법도 실행해야 하는 쿼리가 많아지면 손이 많이 갑니다. 리눅스 MYSQL 쿼리 파일 일괄 실행 그럴 땐 리눅스에서 cat 명령어로 쿼리할 sql의 내용을 합치고 파이프라인(l)을 이용해서 mysql 데이터베이스에 쿼리를 실행할 수 있습니다. sql의 내용은 문자열로 구성되어 있기 때문에 cat으로 처리가 가능합니다. 예를 들어, createtable_A.sql, createtable_B.sql, createta..
SID란? 오라클(Oracle) 데이터베이스에서 SID (System Identifier)는 특정 인스턴스나 데이터베이스를 고유하게 구별하는 식별자입니다. 하나의 서버에서 여러 인스턴스나 데이터베이스가 동작할 수 있기 때문에 SID를 사용하여 각각을 식별합니다. 오라클 데이터베이스 연결 일반적으로 Oracle SQL Developer나 Toad 같은 GUI 툴을 이용해서 데이터베이스를 연결할 때 SID나 서비스 이름(Service Name) 중 하나가 필요합니다. Service Name은 하나 이상의 오라클 인스턴스를 대상으로 하는 논리적 단위입니다. 오라클 Real Application Clusters(RAC) 같은 환경에서는 여러 인스턴스가 동일한 데이터베이스에 서비스를 제공할 수 있으므로 서비스 이..
RDBMS는 여러 개의 테이블이 관계를 갖기 때문에 각 테이블을 조합하여 원하는 형태로 데이터를 뽑아낼 수 있습니다. 예를 들어, A와 B 테이블에서 각각 필요한 컬럼만 빼내서 C라는 테이블로 결과를 도출하는 식입니다. 이때 C를 마치 실제 테이블처럼 사용할 수 있습니다. 이게 VIEW 테이블의 개념입니다. 이런 방식이 왜 필요한지, 어떻게 사용할 수 있는지 알아보겠습니다. 뷰 테이블이란? 데이터베이스에서 뷰(View)는 실제 테이블의 데이터를 기반으로 만든 가상의 테이블입니다. 실제로 데이터를 저장하지는 않지만 데이터를 가상으로 구성해서 사용자에게 보여주고, 사용자가 실제 테이블에 접근하는 걸 막을 수 있습니다. 그러면서도 사용자 입장에서는 필요한 정보만 간단히 볼 수 있기 때문에 데이터를 더 쉽게 이..
오라클(Oracle)에서 || 연산자를 이용하면 문자열을 연결할 수 있습니다. 두 개 이상의 문자열을 합쳐 하나의 문자열을 만드는 작업은 활용 빈도가 꽤 높기 때문에 알아두면 유용하게 사용하실 수 있습니다. || 구문 '문자열1' || '문자열2' 가장 간단한 방법으로 select 문과 함께 사용하면 아래와 같이 쓸 수 있습니다. SELECT '문자열' || '연결' AS Result; 예시 1) 테이블에서 컬럼에 저장된 문자열 데이터를 연결할 수도 있습니다. 아래와 같이 customers 테이블이 있습니다. 이때 Address 컬럼과 City 컬럼을 합친 결과를 내고 싶으면 아래와 같이 쓸 수 있습니다. select City || ' ' || Address as CityAddress from custo..