2010-02-13 37 views
8

chúng tôi đang viết một công cụ khoa học với sự hỗ trợ của MySQL. Vấn đề là, chúng ta cần độ chính xác micro giây cho các trường datetime của chúng ta, mà MySQL hiện không hỗ trợ. Tôi thấy ít nhất hai cách giải quyết ở đây:Lưu trữ micro giây trong MySQL: cách giải quyết nào?

  • Sử dụng loại thập phân() với phần nguyên tương ứng với giây kể từ thời điểm nào đó (tôi nghi ngờ rằng thời đại UNIX sẽ làm, vì chúng tôi phải lưu trữ số đo được thực hiện Những năm 60 và 50).
  • Sử dụng hai cột số nguyên, một cho số giây, cột còn lại tính bằng micro giây.

Truy vấn phổ biến nhất là chọn cột tương ứng với khoảng thời gian (ví dụ: dt_record> time1 và dt_record < time2).

Phương pháp nào trong số những phương pháp này (hoặc một phương pháp khác) có khả năng cung cấp hiệu suất tốt hơn trong trường hợp các bảng lớn (hàng triệu hàng)?

Trả lời

4

Nếu bạn nói rằng các truy vấn phổ biến nhất là cơ sở thời gian, Tôi khuyên bạn nên thực hiện với một cột duy nhất lưu trữ thời gian như trong tùy chọn đầu tiên.

Bạn có thể chọn kỷ nguyên của riêng bạn cho ứng dụng và làm việc từ đó.

Điều này sẽ đơn giản hóa các truy vấn cần được viết khi tìm kiếm khoảng thời gian.

Cũng có một cái nhìn tại 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

Tuy nhiên, micro không thể được lưu trữ vào một cột của bất kỳ dữ liệu theo thời gian loại. Mọi phần micro giây là bị hủy. Chuyển đổi THỜI GIAN hoặc giá trị DATETIME mẫu số (ví dụ, bằng cách thêm +0) kết quả trong một giá trị double với một phần micro của .000000

0

Làm thế nào về việc tách các phần cập nhật vào một date- chỉ một phần, và micro giây từ nửa đêm? Có ít hơn 2^64 micro giây trong ngày. Sau đó, cụm bảng vào {date, microsecond}.

Tôi đoán, mặc dù tôi không biết dữ liệu của bạn, nhưng các truy vấn nhất định sẽ ổn với độ chính xác cấp ngày - 'thử nghiệm năm 1964' không cần phải lo lắng về micro giây.

+0

Truy vấn điển hình sẽ yêu cầu độ chính xác ở mức độ nhỏ cho lần bắt đầu, có nghĩa là truy vấn sẽ cần sử dụng hai cột trong mệnh đề where, theo như tôi hiểu sẽ ảnh hưởng đáng kể đến hiệu suất. – dpq

5

MySQL sẽ hỗ trợ micro, xem MySQL 5.6.4 changelog:

Giây Fractional Xử lý

Thay đổi không tương thích: MySQL bây giờ cho phép giây phân đoạn cho TIME, DATETIME, và các giá trị dấu thời gian, với lên đến micro (6 chữ số) chính xác. Để xác định cột bao gồm phần phân số giây, sử dụng cú pháp type_name (fsp), trong đó type_name là TIME, DATETIME hoặc TIMESTAMP và fsp là độ chính xác của phân số giây. Ví dụ:

TẠO TABLE t1 (t TIME (3), dt DATETIME (6)); Giá trị fsp, nếu được, phải nằm trong khoảng 0 đến 6.Giá trị bằng 0 biểu thị rằng không có phần phân đoạn. Nếu bỏ qua, độ chính xác mặc định bằng 0. (Điều này khác với độ chính xác mặc định là từ giá trị mặc định của SQL là 6, tương thích với các phiên bản trước của MySQL.)

Các mục sau đây tóm tắt những tác động của thay đổi này. Xem cũng Phần 10.3.5, “Số giây phân số trong giá trị thời gian”.

Các vấn đề liên quan