1. Null = " " 객체 초기화 / 객체를 주소를 남긴다. point 남긴다.
2. " " (String) 객체 자료형
3. ' ' (char) Primitive
4. 0 (정수형 int) Primitive
0.0f (float) Primitive
0.0 (double) Primitive
객체의 쓰레기 값은 주소
int의 쓰레기 값은 범위 벗어난 값들어있는거
아무 것도 안담아놔도 쓰레기 값
DB에서 null이랑 " "이랑 다름.
NVL : null값 치환해줌
VIEW 만들어야 하는 이유 :
1. 외부 공개하기 꺼리는 내용(컬럼)은 안보여주려고
2. TUPLE 있는 갯수대로 다 보여 주지 않을 수 도 있음. -> 분산처리 할수 있으니까 SELECT 하는 성능 좋아짐.
VIEW는 수정할 때 ALTER 쓰지 않아요!! CREATE OR REPLACE
인덱스
인덱스 쓰는 이유 : 조회속도 향상 (SELECT할 때)
쓰면 좋지만 취약점 알아보자
DML에 취약 (INSERT, UPDATE, DELETE)
만약 INSERT뭐라도 해서 중간에 들어가고 뒤로 주루룩 밀려야 하면 정렬을 다시 해야해서 작업이 많아서..안좋으니까 INSERT를 많이 해야할 것 같으면 인덱스 별로! UPDATE도 마찬가지
하지만! DELETE는 괜찮아요. 그 인덱스 자리 비워둠. 그러니까 정렬하지 않아서 속도상관 없다.
인덱스 생성
CREATE UNIQUE INDEX idx_dept2_dname
ON dept2(dname);
인덱스 위에서 DNAME에 인덱스준거 DNAME값 중복으로 INSESRT해보면 안될테니가 한번 해보자
인덱스는 유니크 하니까
INSERT INTO DEPT2
VALUES(9100, 'TEMP01', 1006, 'Seoul Branch');
NON-UNIQUE INDEX
CREATE INDEX IDX_DEPT2_AREA
ON DEPT2(AREA);
FUNCTION BASED INDEX(함수기반 인덱스)
CREATE INDEX IDX_PROF_PAY_FBI
ON PROFESSOR(PAY+1000);
DESCENDING INDEX
CREATE INDEX INDEX_PROF_PAY
ON PROFESSOR(PAY DESC);
결합 인덱스(Composite INDEX)
SELECT ENAME, SAL
FROM EMP
WHERE ENAME = 'SMITH'
AND DEPTNO = 20;
CREATE INDEX IDX_EMP_COMP
ON EMP(ENAME, DEPTNO);
BITMAP
--BITMAP INDEX
CREATE BITMAP INDEX IDX_EMP_컬러명(데이터가 이거 아니면 저거일 때)_BIT
ON EMP(이 컬럼명);
인덱스 조회
SELECT TABLE_NAME, COLUMN_NAME, INDEX_NAME
FROM USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMP2';
SELECT TABLE_NAME, INDEX_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'DEPT2';
인덱스 모니터링
: 써는지 확인해보려고.
--인덱스 사용 여부 모니터링 하기 ...뭔가 안됨..
--모니터링 시작
ALTER INDEX IDX_EMP_ENAME MONITORING USAGE;
--모니터링 중단
ALTER INDEX IDX_EMP_ENAME NOMONITORING USAGE;
--사용 유무 확인
SELECT INDEX_NAME_USED
FROM V$OBJECT_USAGE
WHERE INDEX_NAME = 'IDX_EMP_ENAME';
인덱스 재구성(REBUILD) : DELETE해서 비워둔 인덱스 번호를 다시 정렬해서 매꾸는 것./ 사용자들 사용 못하게 해놓고 함.
invisible index : 선능평가시
--INDEX REBUILD하기
CREATE INDEX IDX_EMP_SAL ON EMP(SAL);
--INVISIBLE INDEX...잘 모르겠음
SELECT TABLE_NAME, INDEX_NAME, VISIBILITY
FROM USER_INDEXES
WHERE TABLE_NAME = 'EMP';
ALTER INDEX IDX_EMP_SAL INVISIBLE;
SELECT TABLE_NAME, INDEX_NAME, VISIBILITY
FROM USER_INDEXES
WHERE TABLE_NAME = 'EMP';
--다시 상태를 VISIBLE로 변경해서 자동으로 사용하게 만들기????
ALTER INDEX IDX_EMP_SAL VISIBLE;
SELECT TABLE_NAME, INDEX_NAME, VISIBLE
FROM USER_INDEXES
WHERE TABLE_NAME ='EMP';
ORDER BY 최대한 사용 하지 말기 어쩔 수 없이 써야할 수 있지만...
그럼 정렬하기 위해서는 인덱스 사용해서 정렬!!
SQL힌트 구문에서 해당 인덱스를 수동으로 사용하게 지정하기....????
ALTER INDEX IDX_EMP_SAL VISIBLE;
SELECT TABLE_NAME, INDEX_NAME, VISIBLE
FROM USER_INDEXES
WHERE TABLE_NAME ='EMP';
오름차순
select /* +index (emp idx_emp_sal)*/ ename
from emp
where ename >'0';
ROWID
SELECT ROWID, EMPNO, ENAME
FROM EMP
WHERE EMPNO=7902;
'DATA BASE' 카테고리의 다른 글
20200507 / DELETE TRUNCATE DROP 차이점 비교 (0) | 2020.05.07 |
---|---|
자바 - DB 연동 (0) | 2020.05.07 |
웹서버와 DB연동 하기 (조인) (0) | 2020.04.29 |
무결성 정확성 일관성 (0) | 2020.04.27 |
JSP(JavaServer Pages) 맛보기 (0) | 2020.04.23 |