일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Ha
- 자격증
- Python
- 빅데이터
- 여행
- PLSQL Developer
- 자소서
- 자료
- SQL
- nvarchar
- 동영상
- 스크립트
- 튜닝
- 미래대비
- Chainer
- MySQL
- 유투버
- 오라클
- 오라클 프로시저 반복 실행
- 애플
- 입사지원서
- MSSQL
- 영상편집
- ISMS
- 머신러닝
- AWS
- 개발가이드
- oracle
- 파이썬
- 혁신성장
- Today
- Total
목록IT Cafe+/MySQL (8)
뽁
SET @V_BASE_YMD = '20190701'; SET @V_START_YMD = '20190201'; SET @V_END_YMD = '20190229'; SELECT s.column1 ,s.column2 FROM table1 /*table1의 collation은 utf8mb4_0900_bin */ WHERE base_ymd = @V_BASE_YMD ; 실행 시 오류 발생 SQL오류 (1267): Illegal mix of collations (utf8mb4_0900_bin,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '=' 아래와 같이 WHERE 절에 collate 문 추가해서 해결했어요. SELECT s.column1 ,s.column2..

튜닝 대상 쿼리문 SELECT ti.* FROM ti WHERE ti.agr_dy = IFNULL('20191125',DATE_FORMAT(SYSDATE(),'%Y%m%d')) ; ti 테이블의 인덱스는 IX_TI_01(agr_dy) 있음. 그런데 explain을 보면 Using Temporary 가 보이고. rows 도 9백만건으로 테이블 전체 건수이다. filtered 가 보이므로 ti.agr_dy = IFNULL('20191125',DATE_FORMAT(SYSDATE(),'%Y%m%d')) 조건이 인덱스를 타지 않고 fileter 로 처리되었다. 튜닝1 - 조건절의 IFNULL() 를 IF~THEN 구문으로 대체 - ti.agr_dy = l_arg_dy 조건을 WHERE절 맨 처음으로 위치. (순서..
대량 데이터 집계 처리 시 속도 저하가 발행하여 TMP table 사이즈를 증가하여 해결. Tmp table 관련 파라메터 설정 - tmp_table_size : 검색 결과 등을 담기 위한 메모리 임시 테이블 크기 - max_heap_table_size : 사용자가 생성한 메모리 테이블의 최대 크기 (보통 tmp_table_size와 관계 있으며 유사 크기로 지정) - tmp_table_size / max_heap_table_size : 기존 128M에서 512M 로 변경 - MySQL tmp 사용 영역 : /MYSQL_DATA/tmp/ (1.9 TB)
1. oracle db에서 이관 테이블을 UTL 방식으로 이관시 데이터가 txt 파일로 생성 txt 파일에 생성된 data중 이모티콘은 깨져서 문자로 인식이 불가 ex) '빵빵~🍞' -> '빵빵~' ) -> 부분이 인식 불가능 2. oracle db에서 data 받을때 hextoraw 함수로 풀어서 받음 ex) nvl(rawtohex(MBR_MEMO_CONT), '\N') : MBR_MEMO_CONT 컬럼을 16진수로 풀어서 받음 3. 풀어받은 data를 운영 MySQL DB 로 이관시 UNHEX 함수 사용 set MBR_MEMO_CONT = UNHEX(@var1)
SELECT A.TABLE_SCHEMA "DB", A.TABLE_NAME "테이블ID", A.TABLE_COMMENT "테이블명", B.INDEX_NAME "인덱스명", B.COLUMN_NAME "컬럼ID", C.DATA_TYPE "데이터타입", CASE WHEN C.NUMERIC_SCALE IS NULL OR C.NUMERIC_SCALE = '0' THEN CASE WHEN C.NUMERIC_PRECISION IS NOT NULL THEN C.NUMERIC_PRECISION ELSE C.CHARACTER_MAXIMUM_LENGTH END ELSE CONCAT(C.NUMERIC_PRECISION, ',', C.NUMERIC_SCALE) END "데이터사이즈", CASE WHEN B.INDEX_NAME =..
-- USE INFORMATION_SCHEMA ; (DB들 선택하는 명령 입니다. USE DB명) SELECT A.TABLE_SCHEMA AS DB , A.TABLE_NAME AS Table_ID, A.TABLE_COMMENT AS Table_NAME , B.COLUMN_NAME AS Column_ID , B.COLUMN_COMMENT AS Column_Name , B.DATA_TYPE AS Data_Type , -- B.CHARACTER_MAXIMUM_LENGTH AS Col_Length, -- CHAR character type에 대해 문자 단위로 보고 싶으면 CHARACTER_MAXIMUM_LENGTH 를 사용하시면 됩니다. -- B.CHARACTER_OCTET_LENGTH AS Col_Length..
/************************************************** 테이블명 : T_Table **************************************************/ -- DELETE FROM T_Table; START TRANSACTION; INSERT INTO T_Table( column1, column2....columnN ) SELECT T.RNUM ,value1 ,value2 FROM ( SELECT it.* ,@ROWNUM:=@ROWNUM+1 as RNUM FROM table_name it /*데이터가 많은 테이블*/ ,(select @ROWNUM:=0)as R LIMIT 100 /*생성하고 싶은 개수 작성*/ ) T ; COMMIT;
MySQL 은 utf-8 로 테이블을 생성하면 char, varchar 의 사이징을 문자수로 해야 합니다. 테이블 생성 CREATE TABLE ztest_varchar ( var varchar(100) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='다국어 테스트'; 다국어 테스트 데이터 생성 insert into ZTEST_VARCHAR values('나라말싸미, 말싸밓, 말쌓밒'); /*한글*/ insert into ZTEST_VARCHAR values('Hello'); /*영어*/ insert into ZTEST_VARCHAR values('高仁福'); /*한자*/ insert into ZTEST_VARCHAR values('Tạm biệt'..