CASECASE ( 조건 or 값 ) WHEN 값1 THEN 표시값 WHEN 값2 THEN 표시값 WHEN 값3 THEN 표시값ELSE 표시값END ex) case (test) when 'Y' THEN 'YES' when 'N' then 'NO' else 'Mola' end IFIF( 필드 = 값, 참일때값, 거짓일때값) ex) if( test = 'Y', 'YES', 'NO') IFNULLIFNULL (값1, 값2) ex) select ifnull( test, 0) from testtest값이 null이면 0을 아니면 test값 출력 ISNULL ( MS-SQL 에서 사용)ISNULL (값)ex) select isnull (test) from testtest 값이 null 이면 1 아니면 0
본문전체적인 과정은 간단합니다. 복사테이블 생성 -> 복사테이블에 원본 테이블 데이터 복사 -> 테이블 이름 변경 순으로 진행됩니다. 그 사이에 짜잘한 내용들을 추가하였습니다.모든 내용은 정기점검 등으로 외부에서 DB 사용이 중지된때라는 가정하에 진행합니다. 소개드리는 방법이라 하더라도 40~50분정도의 시간이 필요합니다. 기존 테이블의 FK 삭제기존 테이블에 FK 제약조건이 있을 경우엔 바로 카피 테이블을 생성할수 없습니다. FK는 이름이 유니크해야하므로, 기존 테이블의 FK를 삭제해야만 진행할 수 있습니다.ALTER TABLE 테이블명 DROP FOREIGN KEY FK이름 FK 컬럼은 지우지 않습니다. 복사해야하므로.. 카피 테이블 생성기존 테이블에서 스키마가 변경된 테이블을 새로 만듭니다. (예를..
explain쿼리의 동작을 보여주는 키워드ex) explain select * from test; idselect의 구분번호 select가 구분되어 실행되면 id가 다를것이고 구분되어 실행되지않으면 id가 같다 select typeselect type에는 primary, union, simple, subquery 등이 있다simple은 아무것도없이 select만 사용할때 보여진다 ex) explain select now(); typetype에는 ALL, index, ref, const 등이 있다 ALL : FullScanref : 조인 수행시 매치되는 인덱스의 모든 행을 읽을경우const : 딱 하나의 행과 매치될경우index : index를 전체 스캔 extra쿼리 실행시 필요한 추가 정보를 제공성능 ..
union은 각 select의 결과를 합치는것으로 컬럼의 수가 동일해야 합칠수있다 select t1 from test1unionselect t2 from test2; union 과 union all이 있는데 union == union distinct 중복을 제거하며union all 중복을 제거하지않는다 속도를 생각한다면 union all이 더 나을수도있다 인덱스 최적화할려고 or조건을 제거하기위해 사용해봤는데 쿼리가 너무길어져서 가독성이 떨어지는 부분이 있지만 속도는 조금 빨라진거같다
select문 앞에 explain을 붙이면 인덱스를 사용하는지 안하는지 확인할수있으며 type에 ALL이 있다면 FullScan 인덱스를 타고있지않다는 표시 경우의수가 적을경우에는 인덱스를 타지않습니다ex) select * from Table_Name where No>0 and A>0; // 인덱스 안탐 인덱스는 하나만 탑니다오라클의 경우에는 인덱스를 여러개 걸어주면 그것을 다 타지만 MySQL에선느 인덱스를 하나만 탑니다 결합인덱스 사용법. 특정 테이블에서 동일한 쿼리문을 주로 사용하고 그 쿼리문이 아래와 같을 경우... select * from Table_Name where A='a' and B='b' and C='c'; 이경우 이 세개의 인덱스를 전부 타기 위해서는 결합인덱스를 걸어줘야 됩니다. A..