DataBase32 [SQL]간단하면서 쉬운 쿼리 최적화 방법 쿼리 최적화는 상당히 어려우며 복잡합니다. 최적화되지 않은 쿼리는 CPU, 메모리를 불필요하게 소모하고 서비스를 사용하는 사용자에게 불편함을 제공합니다. 하지만 초급 개발자가 쿼리를 최적화하기 위해 실행 계획을 분석하는 것은 굉장히 어렵습니다. 이번 포스팅은 저처럼 초급 개발자가 수행할 수 있는 쿼리 최적화 방법을 소개합니다. 1. SELECT * 사용 금지 쿼리를 최적화하는 가장 쉬운 방법으로 필요한 칼럼만 조회하는 것입니다. 아스타리스크(*)를 사용하여 필요하지 않은 칼럼을 조회해야 하는 경우 불필요하게 리소스를 소모합니다. 2. LIKE 검색시 와일드카드(%) 끝에 작성 가능하면 와일드카드를 끝에 작성하는 것이 좋습니다. -- 비추천 SELECT * FROM TABLE WHERE COL LIKE '.. DataBase/이론&SQL 2022. 4. 15. [데이터베이스]TRUNCATE, DELETE, DROP 차이점 TRUNCATE, DELETE, DROP의 차이점은 SQLD 시험에서 자주 나오는 내용입니다. 이번 포스팅은 TRUNCATE, DELETE, DROP의 차이점을 정리합니다. TRUNCATE TRUNCATE TABLE 명령어는 개별적으로 행을 삭제할 수 없으며, 테이블 내부의 모든 행을 삭제합니다. TRUNCATE TABLE 테이블명; TRUNCATE의 특징 TRUNCATE는 DDL(데이터 정의 언어) 명령입니다. TRUNCATE는 테이블 잠금을 사용하여 실행되지만, 각 행은 잠기지 않습니다. TRUNCATE와 WHERE 절을 함께 사용할 수 없습니다.(개별적으로 행 삭제 불가능) TRUNCATE는 테이블에서 모든 행을 제거합니다. 트랜잭션 로그에 한 번만 기록되므로 DELETE보다 성능 면에서 더 빠릅니.. DataBase/이론&SQL 2021. 11. 29. [ORACLE]Null 처리 방법 이번 포스팅은 ORACLE에서 Null 처리 및 검사 방법을 설명합니다. 목차 IS [NOT] NULL NVL NVL2 NULLIF COALESCE DECODE CASE IS [NOT] NULL expr1 IS [NOT] NULL 테이블에서 expr1 칼럼이 NULL 값이거나 NULL 값이 아닌 행을 반환합니다. EMP 테이블에서 MONEY 칼럼의 값이 NULL인 직원들을 조회하려면 다음과 같이 쿼리를 작성할 수 있습니다. SELECT * FROM EMP WHERE MONEY IS NULL; 실행 결과 반대로 MONEY 칼럼의 값이 NULL이 아닌 직원들은 IS NOT NULL을 사용하여 조회할 수 있습니다. SELECT * FROM EMP WHERE MONEY IS NOT NULL; 실행 결과 NULL.. DataBase/Oracle 2021. 11. 28. [데이터베이스]이상 현상(Anomaly) 이상 현상(Anomaly)이란? 데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성이 저하됩니다. 이러한 원인은 데이터 이상 현상(Anomaly)에 의해 발생하며, 이상 현상으로 인해 현실세계의 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생합니다. 데이터 이상은 삽입 이상, 업데이트 이상, 삭제 이상이라는 세 가지 유형이 존재합니다. 다음은 이상 현상을 설명할 대학교 테이블입니다. 학번 학생명 학과 코드 학과명 학과장 코드 학과장명 1 도우너 101 경영학과 1000 워런 버핏 2 고길동 101 경영학과 1000 워런 버핏 3 또치 102 물리학과 2000 아인슈타인 4 마이콜 102 물리학과 2000 아인슈타인 5 둘리 103 컴퓨터공학과 3000 빌 .. DataBase/이론&SQL 2021. 11. 28. [데이터베이스]트랜잭션 ACID 속성 트랜잭션이란? 데이터베이스는 단순히 조직화된 데이터의 집합입니다. 예를 들어 성적, 계좌 정보, 급여 명세서 등을 예시로 설명할 수 있습니다. 위에서 설명한 정보들(성적, 계좌 정보, 급여 명세서 등...)은 비즈니스에 맞게 조직적이고 일관된 방식으로 데이터를 관리합니다. 여기서 말하는 비즈니스에 대해 설명드리자면, 대한민국에는 여러 개의 은행사가 존재합니다. 신한은행, 국민은행, 부산은행 등 수많은 은행이 존재하지만, 은행별로 계좌를 관리하는 로직 또는 테이블의 구조가 은행마다 다를 수 있습니다. 즉, 은행마다 데이터를 관리하는 로직 또는 체계를 비즈니스라고 할 수 있습니다. 앞서 언급한 정보들은 중요한 정보(=데이터)가 포함되어 있습니다. 중요한 정보가 일관성이 없거나 신뢰할 수 없다면, 사용자에게는.. DataBase/이론&SQL 2021. 11. 28. [ORACLE]ORA-00970: GROUP BY 표현식이 아닙니다 토드, SQL Developer, DBeaver와 같은 SQL 개발 도구에서는 쿼리가 정상적으로 실행이 되는데, mybatis 또는 ibatis에서 「 ORA-00970: GROUP BY 표현식이 아닙니다 」 라는 에러가 발생하는 경우가 있습니다. 에러 원인 GROUP BY 절에 파라메타가 있을 경우 SELECT COLUMN1 , #{PARAM} FROM TABLE GROUP COLUMN1, #{PARAM} 에러 해결 방법 #을 $로 변경($로 변경시 보안상 문제 있으므로 추천하는 방안은 아님) InLine View 적용 SELECT COLUMN1 , COLUMN2 FROM ( SELECT COLUMN1 , #{PARAM} AS COLUMN2 FROM TABLE ) GROUP COLUMN1, COLUMN2 DataBase/Oracle 2021. 7. 7. [MsSQL]임시 테이블의 종류 MsSQL에서 사용 가능한 임시 테이블(Temporary Tables) 종류에 대해 포스팅합니다. 임시 테이블(Temporary Tables)이란? 임시 테이블은 말 그대로 임시로 사용되는 테이블이며, SELECT, UPDATE, INSERT, DELETE와 JOIN 기능을 사용할 수 있습니다. 임시 테이블은 종류에 따라서 제약조건과 삭제되는 경우가 다릅니다. 대표적인 예시로 테이블 변수는 기본 키 설정이 가능하지만, 로컬 임시 테이블과 전역 임시 테이블은 기본 키 설정이 불가능합니다. 그리고 대부분의 임시 테이블은 연결된 세션이 종료되면 삭제되지만, tempdb에서 직접 테이블을 생성했을 경우에는 서버를 재시작해야 삭제됩니다. MsSQL에서 임시 테이블 종류 1. 테이블 변수(Table variable.. DataBase/MsSQL 2021. 6. 27. [ORACLE]LENGTH vs LENGTHB vs VSize LENGTH Function - 문자열의 길이를 반환합니다. LENGTH( string ) LENGTHB Function - 문자열의 Byte 수를 반환합니다. LENGTHB( string ) VSize Function - 표현식의 Byte 수를 반환합니다. VSIZE( expression ) EX 1) LENGTH SELECT LENGTH('ORACLE') AS LENGTH_RESULT FROM DUAL; EX 2) LENGTHB SELECT LENGTHB('ORACLE') AS LENGTHB_RESULT FROM DUAL; EX 3) VSize SELECT VSIZE('ORACLE') AS VSIZE_RESULT FROM DUAL; 한글은 Character Set에 따라 byte가 다르다. 'LENG.. DataBase/Oracle 2021. 6. 26. [ORACLE]문자열의 음성을 코드로 반환하는 SOUNDEX 함수 SOUNDEX Function SOUNDEX( string ) SOUNDEX 함수는 문자열의 음성을 4자리의 음성 코드로 반환합니다. 음성 코드는 문자 1자리 + 숫자 3자리로 구성되어있습니다. 특징 반환 값의 첫 번째 문자는 매개변수(string)의 첫 문자입니다. 숫자 3자리는 자음으로 결정됩니다. 대소문자를 구분하지 않습니다. 음성으로 표현할 수 없는 문자일 경우 NULL을 반환합니다. EX 1) 대소문자 구분 안함 SELECT SOUNDEX('tech on the net') AS SOUNDEX_RESULT01 , SOUNDEX('TECH ON THE NET') AS SOUNDEX_RESULT02 FROM DUAL; EX 2) 음성이 유사한 경우 SELECT SOUNDEX('apples') AS S.. DataBase/Oracle 2021. 6. 26. [ORACLE]문자 치환 TRNSLATE 함수 TRANSLATE Function TRANSLATE(string, from_string, to_string) TRANSLATE 함수는 특정 문자를 지정된 문자로 치환된 문자열을 반환합니다. REPLACE 함수와는 다르게 단일 문자를 치환합니다. 설명하기 어려운 함수이므로 바로 샘플 쿼리와 그림으로 설명합니다. 샘플 쿼리 SELECT TRANSLATE('ORACLE', 'OAE', '12') AS TRANS_RESULT , LENGTH(TRANSLATE('ORACLE', 'OAE', '12')) AS TRANS_LEN FROM DUAL; 치환 과정 원본 문자열의 치환 쿼리 결과 문자 'E'는 공백으로 치환이 되었기 때문에 치환된 문자열의 길이는 5입니다. 매개변수 string - 기준이 되는 원본 문자열입.. DataBase/Oracle 2021. 6. 26. [ORACLE]문자열 치환 REPLACE 함수 REPLACE Function REPLACE(string_expression, string_pattern [,string_replacement]) REPLACE 함수는 특정 문자열을 지정된 문자열로 치환된 문자열을 반환합니다. 매개변수 string_expression - 기준이 되는 문자열입니다. - NULL 또는 빈 값('')인 경우 REPLACE함수는 NULL을 반환합니다. string_pattern - string_expression에 포함된 특정 문자열(string_pattern)입니다. - string_expression에 특정 문자열(string_pattern)이 존재하지 않을 경우 REPLACE 함수는 치환을 하지 않으므로 string_expression을 반환합니다. string_repla.. DataBase/Oracle 2021. 6. 25. [ORACLE]나머지 값을 구하는 REMAINDER, MOD 함수 REMAINDER Function REMAINDER (number2, number1) number2를 number1로 나누었을 때 나머지 값을 반환합니다. MOD Function MOD ( number2, number1 ) number2를 number1로 나누었을 때 나머지 값을 반환합니다. REMAINDER 함수의 특징 number2와 number1은 모든 숫자 데이터 타입이 가능합니다. 반환 값은 숫자 데이터 타입입니다. number2가 무한대이며, 데이터 타입이 NUMBER이면 오류를 반환하고 데이터 타입이 BINARY_FLOAT 또는 BINARY_DOUBLE이면 NaN을 반환합니다. number1 != 0 이면 나머지 값의 계산식은 number2 - (number1 * ROUND(number2 /.. DataBase/Oracle 2021. 6. 5. 이전 1 2 3 다음