سؤال

نحن نكتب أداة علمية بدعم MySQL.المشكلة هي أننا نحتاج إلى دقة ميكروثانية لحقول التاريخ والوقت، وهو ما لا يدعمه MySQL حاليًا.أرى حلين على الأقل هنا:

  • استخدام نوع عمود عشري()، مع جزء صحيح يتوافق مع الثواني منذ وقت ما (أشك في أن عصر UNIX سيفي بالغرض، حيث يتعين علينا تخزين القياسات التي تم التقاطها في الستينيات والخمسينيات).
  • باستخدام عمودين صحيحين، أحدهما للثواني والآخر للميكروثانية.

الاستعلام الأكثر شيوعًا هو تحديد الأعمدة المقابلة للفاصل الزمني (أي.dt_record > time1 و dt_record < time2).

أي من هذه الطرق (أو ربما طريقة أخرى) من المحتمل أن توفر أداءً أفضل في حالة الجداول الكبيرة (ملايين الصفوف)؟

هل كانت مفيدة؟

المحلول

إذا قلت أن الاستعلامات الأكثر شيوعًا هي القاعدة الزمنية، أوصي باستخدام عمود واحد يخزن الوقت كما في خيارك الأول.

يمكنك اختيار العصر الخاص بك للتطبيق والعمل من هناك.

من المفترض أن يؤدي ذلك إلى تبسيط الاستعلامات التي يجب كتابتها عند البحث عن الفترات الزمنية.

ألقِ نظرة أيضًا على 10.3.1.أنواع التاريخ والوقت والتاريخ والطابع الزمني

ومع ذلك ، لا يمكن تخزين microseconds في عمود من أي نوع من البيانات الزمنية.يتم التخلص من أي جزء microseconds.تحويل الوقت أو قيم DateTime إلى نموذج رقمي (على سبيل المثال ، بإضافة +0) يؤدي إلى قيمة مزدوجة مع جزء microseconds من .000000

نصائح أخرى

سيدعم MySQL الميكروثانية، انظر سجل التغيير MySQL 5.6.4:

التعامل مع الثواني الكسرية

التغيير غير المتوافق:يسمح MySQL الآن بثانية الكسور للوقت وقيم DateTime و Timestamp ، مع دقة ما يصل إلى microseconds (6 أرقام).لتحديد العمود الذي يتضمن جزءًا من ثواني الكسور ، استخدم بناء الجملة type_name (FSP) ، حيث يكون Type_Name هو الوقت أو DateTime أو Timestamp ، و FSP هو الدقة الكسرية.على سبيل المثال:

إنشاء جدول t1 (t TIME(3)، dt DATETIME(6));يجب أن تكون قيمة FSP ، إذا تم تقديمها ، في النطاق من 0 إلى 6.تشير قيمة 0 إلى أنه لا يوجد جزء كسري.إذا تم حذفها، فإن الدقة الافتراضية هي 0.(هذا يختلف عن الافتراضي SQL القياسي من 6 ، للتوافق مع إصدارات MySQL السابقة.)

وتلخص العناصر التالية الآثار المترتبة على هذا التغيير.انظر أيضًا القسم 10.3.5 ، "ثواني كسور في قيم الوقت".

ماذا عن تقسيم أجزاء التاريخ إلى جزء للتاريخ فقط، وميكروثانية من منتصف الليل؟يوجد أقل من 2^64 ميكروثانية في اليوم.ثم قم بتجميع الجدول في {date، ميكروثانية}.

أعتقد، على الرغم من أنني لا أعرف بياناتك، أن بعض الاستعلامات ستكون جيدة مع الدقة على مستوى اليوم - "التجارب في عام 1964" لا داعي للقلق بشأن الميكروثانية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top