MySQL 에서 시간 을 저장 하 는 가장 좋 은 실천 지침

4641 단어 mysql기억시간.
머리말
평소에 개발 할 때 특정한 기록 의 생 성 시간 과 수정 시간 을 기록 하 는 데 시간 이 자주 필요 하 다.데이터베이스 에 시간 을 저장 하 는 방식 은 여러 가지 가 있다.예 를 들 어 MySQL 자체 가 날짜 유형 을 제공 했다.예 를 들 어 DATETIME,TIMESTAMEP 등 이다.우 리 는 시간 스탬프 를 INT 형식 으로 직접 저장 할 수도 있 고 시간 을 문자열 형식 으로 직접 저장 하 는 사람 도 있다.
그렇다면 도대체 어떤 저장 시간 방식 이 더 좋 을 까?
문자열 저장 시간 형식 을 사용 하지 마 십시오.
초보 자가 범 하기 쉬 운 오류 로 필드 를 바로 VARCHAR 형식 으로 설정 해'2021-01-01 00:00:00'과 같은 문자열 을 저장 하기 쉽다.물론 이렇게 하 는 장점 은 비교적 간단 하고 손 이 빠르다 는 것 이다.
그러나 이렇게 하 는 것 을 극력 추천 하지 않 는 다.왜냐하면 이렇게 하 는 것 은 두 가지 큰 문제 가 있 기 때문이다.
  • 문자열 이 차지 하 는 공간 이 크다
  • 이렇게 저 장 된 필드 는 효율 이 너무 낮 아서 한 글자 씩 만 비교 할 수 있 고 MySQL 이 제공 하 는 날짜 API 를 사용 할 수 없습니다
  • MySQL 의 날짜 형식
    MySQL 데이터베이스 에서 흔히 볼 수 있 는 날짜 유형 은 YEAR,DATE,TIME,DATETIME,TIMESTAMEP 이다.일반적으로 날 짜 를 초 까지 정확하게 해 야 하기 때문에 그 중에서 가장 적합 한 것 은 DATETIME,TIMESTAMEP 이다.
    DATETIME
    DATETIME 이 데이터베이스 에 저장 하 는 형식 은 YYYY-MM-DD HH:MM:SS 로 8 개의 바이트 가 고정 되 어 있 습 니 다.
    MySQL 5.6 버 전부터 DATETIME 형식 은 밀리초,DATETIME(N)의 N 은 밀리초 정밀 도 를 나 타 냅 니 다.예 를 들 어 DATETIME(6)은 6 자리 의 밀리초 값 을 저장 할 수 있다 는 뜻 이다.
    TIMESTAMEP
    TIMESTAMP 가 실제 저장 한 내용 은'1970-01-01 00:00:00'부터 현재까지 밀리초 입 니 다.MySQL 에 서 는 타 입 TIMESTAMP 가 4 개의 바이트 를 차지 하기 때문에'2038-01-19 03:14:07'까지 만 저장 할 수 있 습 니 다.
    MySQL 5.6 버 전부터 타 입 TIMESTAMP 도 밀리초 간 지원 된다.DATETIME 와 달리 밀리초 가 있 을 경우 타 입 TIMESTAMP 는 7 개의 바이트 가 차지 하지만,DATETIME 은 밀리초 정 보 를 저장 하 든 말 든 8 개의 바이트 가 차지 합 니 다.
    타 입 TIMESTAMP 의 가장 큰 장점 은 시간 대 속성 을 가 질 수 있다 는 것 입 니 다.본질 적 으로 밀리초 에서 바 뀌 었 기 때 문 입 니 다.만약 당신 의 업무 가 서로 다른 국가 시간 대 에 대응 해 야 한다 면,타 입 TIMESTAMP 는 좋 은 선택 입 니 다.예 를 들 어 뉴스 와 같은 업 무 는 보통 사용자 가 이 뉴스 를 발표 할 때 해당 하 는 자신의 국가 시간 을 알 고 싶 으 면 TIMESTAMP 는 선택 이다.Timestamp 형식 필드 의 값 은 서버 시간 대 에 따라 달라 집 니 다.자동 으로 해당 시간 으로 환산 합 니 다.쉽게 말 하면 시간 대 에 따라 같은 필드 를 기록 하 는 값 이 다 를 수 있 습 니 다.
    TIMESTAMP 의 성능 문제
    TIMESTAMP 에는 잠재 적 인 성능 문제 도 있다.
    밀리초 에서 타 입 TIMESTAMP 로 전환 하 는 데 필요 한 CPU 명령 이 많 지 않 지만 직접적인 성능 문 제 는 가 져 오지 않 습 니 다.그러나 기본 운영 체제 시간 대 를 사용 하면 시간 대 를 통 해 시간 을 계산 할 때마다 운영 체제 바 텀 시스템 함수 를 호출 합 니 다.tz_convert(),이 함 수 는 이 운영 체제 시간 대가 수정 되 지 않도록 추가 잠 금 작업 이 필요 합 니 다.따라서 대규모 동시 방문 시 핫 이 슈 자원 경쟁 으로 인해 두 가지 문제 가 발생 할 수 있다.
  • 성능 이 DATETIME 보다 못 하 다.DATETIME 는 시간 대 전환 문제 가 존재 하지 않 는 다
  • 4.567917.성능 디 더 링:대량의 동시 다발 시 성능 디 더 링 문제 가 존재 합 니 다TIMESTAMP 사용 을 최적화 하기 위해 서 는 운영 체제 시간 대가 아 닌 명시 적 시간 대 를 사용 하 는 것 을 권장 합 니 다.예 를 들 어 설정 파일 에 시간 대 를 표시 하고 시스템 시간 대 를 사용 하지 않 습 니 다.
    
    [mysqld]
    
    time_zone = "+08:00"
    
    
    이 두 가지 데이터 유형의 장단 점 을 간단하게 정리 하 자.
    DATETIME 에 저 장 된 시간 상한 선 이 없고 TIMESTAMP 에 저 장 된 시간 상한 선 은'2038-01-19 03:14:07'까지 만 가능 합 니 다
  • DATETIME 은 시간 대 속성 을 가지 지 않 고 전단 또는 서버 에서 처리 해 야 하지만 데이터 베 이 스 를 저장 하고 데 이 터 를 읽 는 것 만으로 도 성능 이 좋 습 니 다
  • TIMESTAMP 는 시간 대 속성 을 가지 지만 시간 대 를 통 해 시간 을 계산 해 야 하 며 동시 방문 시 성능 문제 가 발생 합 니 다
  • 저장 DATETIME 은 TIMESTAMEP 보다 일부 공간 을 더 많이 차지한다
  • 수치 형 타임 스탬프(INT)
    많은 경우 에 우 리 는 int 나 bigint 형식의 수치,즉 시간 스탬프 를 사용 하여 시간 을 표시 합 니 다.
    이러한 저장 방식 은 Timestamp 유형의 장점 을 가지 고 이 를 사용 하여 날짜 정렬 과 대비 등 작업 을 하 는 효율 이 더욱 높 고 시스템 간 에 도 편리 하 다.왜냐하면 저 장 된 수치 일 뿐이다.단점 도 뚜렷 하 다.바로 데이터 의 가 독성 이 너무 떨 어 지기 때문에 구체 적 인 시간 을 직관 적 으로 볼 수 없다 는 것 이다.
    시간 대별 데 이 터 를 볼 필요 가 있다 면
    
    select * from t where created_at > UNIX_TIMESTAMP('2021-01-01 00:00:00');
    
    
    DATETIME vs TIMESTAMP vs INT,어떻게 선택 하나 요?
    모든 방식 은 각자 의 장점 을 가지 고 다음 에 이 세 가지 방식 에 대해 간단 한 대 비 를 한다.
    날짜 종류
    공간 을 점용 하 다
    날짜 형식
    날짜 범위
    질문
    DATETIME
    8 바이트
    YYYY-MM-DD HH:MM:SS
    1000-01-01 00:00:00 ~9999-12-31 23:59:59
    예.
    TIMESTAMP
    4 바이트
    YYYY-MM-DD HH:MM:SS
    1970-01-01 00:00:00 ~2038-01-19 03:14:07
    아니.
    INT
    4 바이트
    풀 디지털 타임 스탬프
    1000-01-01 00:00:01 이후 의 시간
    아니.
    TIMESTAMP 는 INT 와 본질 이 같 지만 이에 비해 INT 는 개발 에 우호 적 이지 만 DBA 및 데이터 분석 요원 에 게 우호 적 이지 않 고 가 독성 이 떨어진다.그래서'고성능 MySQL'의 저자 가 추천 합 니 다.  TIMESTAMP 의 이 유 는 시간 이 더 직관 적 이라는 것 을 나타 내 는 수치 때문이다.다음은 원문 입 니 다.

    시간 대 문 제 는 전단 이나 서비스 에서 한 번 전환 할 수 있 으 며 반드시 데이터 베이스 에서 해결 해 야 하 는 것 은 아니다.
    총결산
    본 고 는 몇 가지 가장 자주 사용 하 는 저장 시간의 방식 을 비교 하 였 는데,내 가 가장 추천 하 는 것 은 역시 DATETIME 이다.이 유 는 다음 과 같다.
    TIMESTAMP 는 수치 형 타임 스탬프 보다 가 독성 이 더 좋 습 니 다DATETIME 의 저장 상한 선 은 9999-12-31 23:59:59 이 며,TIMESTAMP 를 사용 할 경우 2038 년 에 해결 방안 을 고려 해 야 한다DATETIME 은 시간 대 전환 이 필요 없 기 때문에 TIMESTAMP 보다 성능 이 좋 습 니 다
  • 밀리초 까지 시간 을 저장 해 야 한다 면 TIMESTAMP 는 7 개의 바이트 로 DATETIME 8 바이트 와 차이 가 많 지 않다
  • MySQL 에 저 장 된 시간 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.MySQL 저장 시간 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기