본문 바로가기
반응형

IT/Database112

[Mysql] Specified key was too long 특정 테이블에 index를 걸고자 할때 아래 에러가 발생하였다. Error Code: 1071. Specified key was too long; max key length is 3072 bytes 원인은 해석 그대로 이다. 인덱스에 사용하는 글자 최대 크기가 정해져있다는것이다. 테이블에 사용하는 인코딩은 UTF8MB4 였고 여기서 한 글자당 4byte를 잡아먹는다. 3072 바이트를 넘을수 없다면 대략 750 글자까지만 허용이 가능하다. 인코딩에 따라 글자 byte수가 다르니 확인해야하고, 인덱스는 별도의 공간을 차지하기에 이렇게 큰 값은 인덱스로 배제하는것이 좋은 선택일듯 싶다. 2024. 1. 23.
[Mysql]GROUP_CONCAT 관련(order by, 구분자, 인코딩) CONCAT 에 대해서는 아래 참고 포스팅을 참고 바란다. Group By 별로 특정 컬럼을 CONCAT 해서 보여주고 싶을 경우 GROUP_CONCAT을 사용한다. 사용법은 아래와 같다. ID NAME AGE test1 AAA 1 test2 BBB 2 test2 CCC 3 여기에서 SELECT ID, GROUP_CONCAT(NAME) FROM TABLE GROUP BY ID; 를 할 경우 test1 , AAA test2 , BBB,CCC 이렇게 출력이 된다. 정렬 ... GROUP_CONCAT(NAME ORDER BY AGE) ... 구분자 변경 ... GROUP_CONCAT(NAME SEPARETOR '-') ... 중복 제거 ... GROUP_CONCAT(DISTINCT NAME) ... 참고 포스.. 2024. 1. 22.
UUID 만들기 / UUID,GUID 차이 이전 포스팅에서 UUID에 대해 다룬적이 있다. 자세한 내용은 참고 포스팅 참고 바란다. 테이블을 생성할때 pk를 지정하기가 애매하고 복합키로 하자니 문제가 있고 등등 그리하여 UUID를 만들어서 pk로 지정하려고 한다. 그럴경우에 UUID를 어떻게 컬럼 생성해야할까? CREATE TABLE TABLE_NAME( UUID VARCHAR2(50) DEFAULT SYS_GUID(), .. .. 이렇게 SYS_GUID 로 지정해준다. UUID 와 GUID 의 차이는 아래와 같다. UUID GUID 범용 고유 식별자 네트워크 상에서 서로 모르는 개체들을 식별하고 구 별하기 위해서는 각각의 고유한 이름이 필요하다. 전역 고유 식별 사용자 어플리케이션에서 사용되는 유사난수. GUID는 생성할 때 항상 유일한 값이 .. 2024. 1. 5.
소트 튜닝 (sort 오퍼레이션) SQL 수행 중 Sort 가 필요한 경우 dbms는 정해진 메모리 공간에 sort area 를 할당하고 정렬을 수행하곤 한다. Oracle은 PGA(Private Global Area) 에 Sqlserver 는 버퍼캐시에 저장을 하곤 한다. 소트를 발생시키는 오퍼레이션은 아래와 같다. Sort Aggregate : 전체 로우를 대상으로 집계를 수행할 때 나타나며, 아래와 같이 Oracle 실행계획에 ‘sort’라는 표현이 사용됐지만 실제 소트가 발생하진 않는다. SQL Server 실행계획엔 ‘Stream Aggregate’라고 표시된다. Sort Order By : 정렬된 결과집합을 얻고자 할 때 나타난다. Sort Group By : Sorting 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다... 2024. 1. 1.
최대, 최소값(GREATEST, LEAST) 일반적으로 쿼리에서 최대 최소 값이라고 하면 Max 와 Min 함수를 의미하지만 이번 포스티에서 다루는 함수는 GREATEST, LEAST 이다. 값들 중에 최대값과 최솟값을 반환하는 함수이다. 사용법은 아래와 같다. SELECT GREATEST(10, 20, 30, 40, 50) FROM dual -- 결과 50 반환 SELECT LEAST(10, 20, 30, 40, 50) FROM dual -- 결과 10 반환 숫자 이외에도 문자열이나 날짜도 사용이 가능하다. SELECT LEAST('AAA', 'BBB', 'CCC', 'DDD') FROM dual -- 결과 AAA 반환 SELECT LEAST(SYSDATE, SYSDATE + 1, SYSDATE + 2) FROM dual -- 결과 SYSDATE.. 2023. 12. 29.
[mysql] 데이터 경로 변경(datadir) mysql 이나 mariadb를 사용할 경우 데이터 폴더의 경로를 확인하는 법은 아래와 같다. select @@datadir; 기본적으로는 /var/lib/mysql 이 default 이다. 변경을 위해서는 여러 작업이 있지만 스텝으로 나눠서 진행 해보면 1. mysql 서비스 중지 -> sudo systemctl stop mariadb 2. 현재 사용중인 폴더를 앞으로 사용할 폴더로 복사해준다. -> rsync -av /var/lib/mysql 이동할경로 참고로 rsync 를 사용해야 하며 해당 명령어는 아래 참고포스팅에서 참고 바란다. 3. mysql 설정정보에서 데이터 경로 변경하기 -> sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf 로 들어가서 datadir.. 2023. 12. 26.
[Oracle] SQL*Developer 실행계획 확인하기 오라클에서 무료 제공해주는 DB툴인 SQL*Developer 에서 execute plan 실행계획 확인하는 방법에 대해서 다룰것이다. 다운로드는 오라클 공식 홈페이지에서 받을수 있다. https://www.oracle.com/database/sqldeveloper/technologies/download/ Oracle SQL Developer Downloads This archive. will work on a 32 or 64 bit Windows OS. The bit level of the JDK you install will determine if it runs as a 32 or 64 bit application. This download does not include the required Orac.. 2023. 12. 3.
[Oracle] 세미 조인(Semi Join), 안티 조인(Anti Join) 세미조인(Semi Join) 세미조인은 두 테이블 간의 일치하는 행을 찾는 조인이다. 일반적으로 우리가 알고 사용하는 조인들과 함께 사용이 된다. 주로 서브쿼리나 Exists 연산자를 사용하여 구현을 하고 일치하는 행이있다면 왼쪽 테이블에 해당하는 행만 반환한다. 참고 포스팅에 Exists 와 In에 대한 내용을 참고하면 세미조인이 이해 갈것이다. (일반 outer join이나 inner join 이 아니라 서브쿼리로 조인하는법) 안티조인(Anti Join) 안티조인은 두 테이블 간에 일치하지 않는 행을 반환하는 조인이다. 즉, 왼쪽 테이블의 행 중에서 오른쪽 테이블과 일치하지 않는 것들을 선택한다. 세미 조인은 equals 조건이지만 안티는 Not equals, Not Exists 등의 연산으로 조인하.. 2023. 11. 29.
[MySQL] ANY, ALL 함수 ANY 함수 컬럼명 비교연산자 ANY(값들 혹은 서브쿼리) 여러개의 비교값 중 하나라도 만족하면 true 반환 IN과 다른점은 비교 연산자를 사용한다는 점 비교 연산자와 ANY > ANY : 최소값보다 크면 >= ANY : 최소값보다 크거나 같으면 ANY(1, 2, 3); ALL 함수 컬럼명 비교연산자 ALL(값들 혹은 서브쿼리) 전체 값을 비교해서 모두 만족해야 true 반환 비교 연산자와 ALL > ALL : 최대값보다 크면 >= ALL : 최대값보다 크거나 같으면 ALL(1, 2, 3); 2023. 11. 27.
반응형