묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
[re] php함수+ db 질문입니다.
2002.07.26 10:27
>1. mktime()함수와 time()함수의 차이점을 알고싶습니다.
- mktime() : int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])
입력받은 date로부터 timestamp를 리턴
- time() : int time ( void)
현재의 timestamp를 리턴. 따로 입력받는 값이 없음
차이점은 아시겠죠? 가장 정확한 답은 매뉴얼에 있습니다. 매뉴얼을 보세요.
>2. 간단히 전체 db내용을 조회해 볼 수있는 프로그램은 없습니까?
우선 사용하는 DB가 뭔가요? DB에는 종류가 너무나도 많죠. oracle, mysql, ms-sql, db2 등등....
각 DB마다 툴이 다르니 가르쳐 드리기가 험난하군요.
mysql의 경우 이곳 자료실에 phpmyadmin이라고 있더군요.
>3. 저장된 값들중에 최고값등 전체db에서 검색해서 하나의 값을 분류해내야될때
> 그전에 최고값을 다른 테이블에다가 미리미리 저장하고 필요할때 그 테이블만 불러오는것이..
> 최고값을 알려고 할때마다 전체 db를 검색해서 max()함수를 이용해 추출해내는것보다 낳을까여?
> 전체 db를 검색하려면 서버에 접속을 해서 읽어야하니 과부하등의 단점이 있지 않나여?
>
이건 잘못된 판단이신 것 같습니다.
이렇게 하시는건 DB, 특히 RDBMS의 특성을 완전 무시하는 겁니다.
max()같은 경우는 거의 DB에 부하를 주지 않으면서 뽑아낼 수 있습니다.
가령 TABLE1이라는 테이블에 COLUMN1이라는 칼럼이 있고 COLUMN1에 값이 1부터 10까지 들어있다고 합시다.
select max(COLUMN1) from TABLE1;
이렇게 하면 TABLE1을 풀스캔해서 최고값을 찾겠죠? 이 경우에는 과부하가 생기죠.
그런데 여기에서 COLUMN1에 인덱스를 걸어주면 어떻게 될까요?
인덱스를 만들면 1부터 10까지의 값이 순서대로 정렬이 된 상태로 존재하게 됩니다.
max()값을 찾기 위해서는 하나의 레코드만 읽으면 되죠.
가령 DESC상태로 인덱스를 만들면 10 이 맨 앞에 오겠죠.
맨 앞의 값을 가져오면 max값이라는게 항상 보장이 되죠.
맨 앞의 값을 가져와서 리턴하고 더 이상의 테이블 스캔은 없습니다.
대용량 DB에서 INDEX는 매우 중요한 요소입니다.
INDEX를 잘 사용하면 10분 걸리던 작업이 1초에 끝날 수도 있고,
잘못 사용하면1초 걸리던 작업이 10분이 걸릴수도 있습니다.
따라 INDEX에 대해 공부해보시면 좋을 것 같습니다.
- mktime() : int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])
입력받은 date로부터 timestamp를 리턴
- time() : int time ( void)
현재의 timestamp를 리턴. 따로 입력받는 값이 없음
차이점은 아시겠죠? 가장 정확한 답은 매뉴얼에 있습니다. 매뉴얼을 보세요.
>2. 간단히 전체 db내용을 조회해 볼 수있는 프로그램은 없습니까?
우선 사용하는 DB가 뭔가요? DB에는 종류가 너무나도 많죠. oracle, mysql, ms-sql, db2 등등....
각 DB마다 툴이 다르니 가르쳐 드리기가 험난하군요.
mysql의 경우 이곳 자료실에 phpmyadmin이라고 있더군요.
>3. 저장된 값들중에 최고값등 전체db에서 검색해서 하나의 값을 분류해내야될때
> 그전에 최고값을 다른 테이블에다가 미리미리 저장하고 필요할때 그 테이블만 불러오는것이..
> 최고값을 알려고 할때마다 전체 db를 검색해서 max()함수를 이용해 추출해내는것보다 낳을까여?
> 전체 db를 검색하려면 서버에 접속을 해서 읽어야하니 과부하등의 단점이 있지 않나여?
>
이건 잘못된 판단이신 것 같습니다.
이렇게 하시는건 DB, 특히 RDBMS의 특성을 완전 무시하는 겁니다.
max()같은 경우는 거의 DB에 부하를 주지 않으면서 뽑아낼 수 있습니다.
가령 TABLE1이라는 테이블에 COLUMN1이라는 칼럼이 있고 COLUMN1에 값이 1부터 10까지 들어있다고 합시다.
select max(COLUMN1) from TABLE1;
이렇게 하면 TABLE1을 풀스캔해서 최고값을 찾겠죠? 이 경우에는 과부하가 생기죠.
그런데 여기에서 COLUMN1에 인덱스를 걸어주면 어떻게 될까요?
인덱스를 만들면 1부터 10까지의 값이 순서대로 정렬이 된 상태로 존재하게 됩니다.
max()값을 찾기 위해서는 하나의 레코드만 읽으면 되죠.
가령 DESC상태로 인덱스를 만들면 10 이 맨 앞에 오겠죠.
맨 앞의 값을 가져오면 max값이라는게 항상 보장이 되죠.
맨 앞의 값을 가져와서 리턴하고 더 이상의 테이블 스캔은 없습니다.
대용량 DB에서 INDEX는 매우 중요한 요소입니다.
INDEX를 잘 사용하면 10분 걸리던 작업이 1초에 끝날 수도 있고,
잘못 사용하면1초 걸리던 작업이 10분이 걸릴수도 있습니다.
따라 INDEX에 대해 공부해보시면 좋을 것 같습니다.