본문 바로가기

728x90
반응형

IT

(110)
sql 쿼리에서 substring_index 함수 사용하는 방법은? SUBSTRING_INDEX() 함수는 MySQL 및 CUBRID 등에서 문자열을 특정 구분자를 기준으로 나눈 뒤, 원하는 위치의 부분 문자열만 추출할 때 사용하는 함수입니다.✅ 기본 문법 SUBSTRING_INDEX(str, delim, count) 파라미터설명str원본 문자열delim구분자 (ex: 쉼표 ,, 슬래시 /, 공백 ' ' 등)count추출할 부분의 위치 (양수: 왼쪽부터 / 음수: 오른쪽부터) ✅ 사용 예제1. 쉼표(,)로 구분된 문자열에서 첫 번째 항목 가져오기SELECT SUBSTRING_INDEX('apple,banana,orange', ',', 1); -- 결과: 'apple' 2. 쉼표로 구분된 문자열에서 앞 2개 항목 가져오기SELECT SUBSTRING_INDEX('apple..
데이터베이스 테이블 인덱스 생성을 위해 효율적인 기준은? 데이터베이스에서 **인덱스(index)**는 쿼리 성능을 향상시키는 핵심 요소입니다. 하지만 무분별하게 생성하면 오히려 쓰기 성능 저하와 디스크 낭비로 이어질 수 있으므로, 효율적인 기준을 바탕으로 신중하게 설계해야 합니다.다음은 인덱스를 효율적으로 생성하기 위한 핵심 기준입니다:✅ 1. WHERE 절/조인 조건에 자주 사용되는 컬럼자주 조건 검색에 사용되는 컬럼은 인덱스를 만드는 것이 효과적입니다.SELECT * FROM users WHERE email = 'test@example.com'; ➡️ email 컬럼에 인덱스 생성 추천✅ 2. JOIN 시 연결되는 컬럼테이블 간 JOIN에서 사용하는 키 컬럼은 인덱스가 없으면 성능이 크게 떨어집니다.SELECT * FROM orders JOIN custo..
sql 쿼리에서 current_timestamp 기능이란? SQL에서 CURRENT_TIMESTAMP는 현재 날짜와 시간을 반환하는 내장 함수입니다. 데이터베이스 서버가 현재 시점을 기준으로 자동으로 값을 생성해 주기 때문에, 주로 다음과 같은 용도로 많이 사용됩니다:✅ 주요 용도 1. 데이터 입력 시 생성 시간 기록INSERT INTO users (username, created_at)VALUES ('chatgpt_user', CURRENT_TIMESTAMP); 2. 로그 테이블에 이벤트 발생 시간 기록INSERT INTO logs (event_type, event_time) VALUES ('login', CURRENT_TIMESTAMP); 3. 최근 데이터 조회 (예: 최근 1시간 이내 데이터) SELECT * FROM orders WHERE order_..
sql 쿼리에서 순위 dense_rank() 함수 사용하는 방법은? DENSE_RANK() 함수는 SQL에서 순위를 매길 때 중복 값을 동일 순위로 처리하면서 다음 순위를 건너뛰지 않는 함수입니다. 예시>점수: 100 90 90 80 순위: 1 2 2 3 ← dense_rank()✅ 사용법SELECT 컬럼1, 컬럼2, DENSE_RANK() OVER (ORDER BY 정렬기준컬럼 [ASC|DESC]) AS 순위FROM 테이블명; 📌 예제예제 테이블: studentsidnamescore1Alice902Bob953Carol904David855Emma80 🎯 점수 기준으로 순위 매기기 (DENSE_RANK() 사용) SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) AS rankFROM studen..
SQL 쿼리 날짜 차이 구하기 datediff 사용하는 방법 아래 쿼리 1,2번 뜻과 차이점은? 1. datediff(ymdt_1,lag(ymdt_1,1) over (order by ymdt_1) as 경과일수_A2. datediff(ymdt_1,lag(ymdt_1,1) over (partition by seq by ymdt_1) as 경과일수_B 주신 두 SQL 구문은 DATEDIFF와 LAG 윈도우 함수를 사용해서 날짜 간 차이, 즉 경과일수를 구하는 용도인데요. 둘 다 유사해 보이지만 PARTITION BY의 유무에 따라 중요한 차이가 생깁니다. ✅ 먼저 각 쿼리의 기본 구조1. 경과일수_ADATEDIFF(ymdt_1, LAG(ymdt_1, 1) OVER (ORDER BY ymdt_1)) AS 경과일수_A 전체 데이터를 대상으로 ymdt_1을 정렬하고, 바..
큐브리드 쿼리 플랜에서 비용 수치를 낮추는 방법은? 큐브리드(CUBRID)에서 쿼리 실행 계획(쿼리 플랜)의 비용(cost) 은 DB 엔진이 해당 쿼리를 처리하는 데 예상되는 리소스 사용량(디스크 I/O, CPU 사용량, 네트워크 등)을 추정한 값입니다. 이 비용 수치가 낮을수록 더 효율적인 쿼리입니다. 다음은 큐브리드에서 쿼리 비용을 낮추는 주요 방법들입니다: ✅ 1. 적절한 인덱스 사용가장 중요한 요소입니다.WHERE, JOIN, ORDER BY, GROUP BY 등에 사용되는 컬럼에 인덱스를 생성하세요.예시:CREATE INDEX idx_table_a ON my_table(a);문자열 날짜 비교 시에도 a 컬럼에 인덱스를 걸면 아래처럼 쿼리에서 인덱스를 활용할 수 있습니다:WHERE a BETWEEN '20240501' AND '20240531'인덱..
sqlite 에서 rank 함수같은 역할은? 요일별로 상위 3개 조회하기 SQLite에서는 RANK() 함수와 비슷한 기능을 RANK() 또는 DENSE_RANK() 윈도우 함수로 구현할 수 있습니다.단, SQLite 3.25.0 이상에서 윈도우 함수(RANK(), ROW_NUMBER() 등)를 지원합니다.✅ 요일별 상위 3개를 구하는 쿼리 예제예를 들어 다음과 같은 테이블이 있다고 가정해볼게요: CREATE TABLE sales ( id INTEGER PRIMARY KEY, day TEXT, -- 요일: 'Mon', 'Tue', ... item TEXT, amount INTEGER); 이때, 요일(day)별로 판매금액(amount) 상위 3개 항목을 구하고 싶다면 다음과 같이 RANK() 또는 ROW_NUMBER()를 활용할 수 있습니다.✅ ROW_..
데이터베이스 /*+ordered use_nl */ 힌트를 쓰면 무조건 성능이 좋은걸까? /*+ ordered use_nl */ 힌트를 사용하면 성능이 좋아질 수도 있지만, 반대로 성능이 급격히 나빠질 수도 있습니다. 힌트는 옵티마이저가 선택하는 기본 실행 계획보다 더 나은 것을 사람이 직접 제시할 수 있을 때만 효과적입니다. 🔍 /*+ ordered use_nl */ 설명✅ ordered옵티마이저에게 FROM 절에 나온 순서대로 조인을 수행하라고 지시합니다.기본적으로는 옵티마이저가 테이블 순서를 바꿔 최적화를 시도합니다.✅ use_nlNested Loop Join (중첩 반복 조인) 을 사용하라고 지시합니다.일반적으로 작은 테이블을 먼저 읽고, 큰 테이블을 조건에 따라 반복 접근하는 방식입니다.⚠️ 언제 좋은 성능이 나올까?성능 향상이 되는 경우:첫 번째 테이블이 매우 작을 때 (드라이빙..

728x90
반응형