문제

우리는 MySQL 지원으로 과학 도구를 작성하고 있습니다. 문제는 MySQL이 현재 지원하지 않는 DateTime 필드에 마이크로 초 정밀도가 필요하다는 것입니다. 여기에는 적어도 두 개의 해결 방법이 있습니다.

  • 정수 부분이 어느 시점 이후 몇 초에 해당하는 10 진수 () 열 유형을 사용합니다 (60 년대와 50 년대에 측정을 저장해야하기 때문에 Unix Epoch가 할 것이라고 의심합니다).
  • 하나는 몇 초 동안, 다른 하나는 마이크로 초에 두 개의 정수 열을 사용합니다.

가장 인기있는 쿼리는 시간 간격 (예 : dt_record> time1 및 dt_record <time2)에 해당하는 열을 선택하는 것입니다.

이 방법 중 어느 것이 큰 테이블 (수백만 행)의 경우 더 나은 성능을 제공 할 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

가장 인기있는 쿼리가 시간 기반이라고 말하면 첫 번째 옵션에서와 같이 시간을 저장하는 단일 열로 진행할 것입니다..

응용 프로그램을 위해 자신의 시대를 선택하고 거기서 작업 할 수 있습니다.

이렇게하면 시간 간격을 검색 할 때 작성 해야하는 쿼리를 단순화해야합니다.

또한 살펴보십시오 10.3.1. DateTime, 날짜 및 타임 스탬프 유형

그러나 마이크로 초는 임의의 시간 데이터 유형의 열에 저장 될 수 없습니다. 모든 마이크로 초 부분은 폐기됩니다. 시간 또는 dateTime 값을 숫자 형태로 변환 (예 : +0을 추가하여)는 .000000의 마이크로 초 부분으로 이중 값을 초래합니다.

다른 팁

MySQL은 마이크로 초를 지원합니다 MySQL 5.6.4 ChangeLog:

분수 초 처리

호환되지 않는 변경 : MySQL은 이제 시간, DateTime 및 Timestamp 값에 대한 분수 초를 마이크로 초 (6 자리) 정밀도로 허용합니다. 분수 초 부분을 포함하는 열을 정의하려면 Type_Name이 시간, DateTime 또는 Timestamp이며 FSP는 분수 초 정밀도 인 구문 type_name (fsp)을 사용하십시오. 예를 들어:

테이블 T1 (t time (3), dt dateTime (6))을 생성하고; 주어진 경우 FSP 값은 0에서 6 범위에 있어야합니다. 0의 값은 분수 부품이 없음을 나타냅니다. 생략하면 기본 정밀도는 0입니다. (이전 MySQL 버전과의 호환성에 대한 표준 SQL 기본 6과 다릅니다.)

다음 항목은이 변경의 의미를 요약합니다. 섹션 10.3.5,“시간 값의 분수 초”도 참조하십시오.

날짜 부품을 날짜 전용 부품으로 나누고 자정부터 마이크로 초를 분할하는 것은 어떻습니까? 하루에는 2^64 마이크로 초 미만이 있습니다. 그런 다음 {date, microSecond}에서 테이블을 클러스터링하십시오.

나는 당신의 데이터를 알지 못하지만, 특정 쿼리는 일일 수준의 정확도로 괜찮을 것이라고 생각합니다. '1964 년 실험'은 마이크로 초에 대해 걱정할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top