استرجاع الصفحة سريع في الخلية، واستخدام الفهرس؟
-
03-07-2019 - |
سؤال
وأود أن سرعة استعلام الخلية التي استرداد أساسا صفحة من البيانات التالية نمط أدناه
select
my_field_A,
my_field_B
where
time_id >= UNIX_TIMESTAMP('1901-01-01 00:00:00') AND
time_id < UNIX_TIMESTAMP('2009-01-16 00:00:00')
ووtime_id
الحقل هو مؤشر الخلية، بعد، الاستعلام يتصرف كما لو كان يقرأ قاعدة البيانات بأكملها في كل الاستعلام (استرداد بضعة خطوط يجري بالفعل بطيئة للغاية). أنا لست خبيرا في الخلية. يمكن للشخص تخمين ما أقوم به خطأ؟
المحلول
تأكد من لديك مؤشر (B-شجرة) على time_id، وهذا ينبغي أن تكون فعالة للاستعلامات النطاق. وتأكد أيضا من أن time_id في تنسيق الوقت المناسب.
إذا كنت تريد حقا أن نفهم ما تقوم به الخلية يمكنك إضافة الكلمة "شرح" أمام الاستعلام وتشغيله في عميل الخلية الخاصة بك. هذا وسوف تظهر بعض المعلومات حول ما تقوم به الخلية ونوع من المسح يتم تنفيذها.
نصائح أخرى
وربما يكون هناك الكثير من time_id
والتي تندرج في إطار هذه المعايير، MySQL
قد يظن أن تفحص الجدول الكامل هو أفضل.
وحاول فرض الفهرس:
SELECT
my_field_A,
my_field_B
FROM mytable FORCE INDEX (index_name_on_time_id)
WHERE
time_id >= UNIX_TIMESTAMP('1901-01-01 00:00:00') AND
time_id < UNIX_TIMESTAMP('2009-01-16 00:00:00')
هل كنت في حاجة إلى نطاق أقل؟ هل هناك أية قيود في وقت سابق من 1901؟ كيف يتم إنشاء عمود time_id؟ إذا كان time_id هو دائما أكبر مع كل دخول جديدة يتم إضافتها إلى DB، قد ترغب في النظر في إيجاد ID مع أقرب دخول 2009-01-16 ثم حدد من قبل ID
select my_field_A, my_field_B
FROM
mytable
WHERE
id <= ?
وإذا كان هذا ليس هو الحال، في محاولة التحقق من التقسيم في المتاحة من الخلية 5.1 و كسر الطاولة من قبل سنوات، وينبغي أن زيادة سرعة بشكل كبير.