استرجاع الصفحة سريع في الخلية، واستخدام الفهرس؟

StackOverflow https://stackoverflow.com/questions/603041

سؤال

وأود أن سرعة استعلام الخلية التي استرداد أساسا صفحة من البيانات التالية نمط أدناه

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 في تنسيق الوقت المناسب.

إذا كنت تريد حقا أن نفهم ما تقوم به الخلية يمكنك إضافة الكلمة "شرح" أمام الاستعلام وتشغيله في عميل الخلية الخاصة بك. هذا وسوف تظهر بعض المعلومات حول ما تقوم به الخلية ونوع من المسح يتم تنفيذها.

http://dev.mysql.com/doc /refman/5.0/en/using-explain.html

نصائح أخرى

وربما يكون هناك الكثير من 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 و كسر الطاولة من قبل سنوات، وينبغي أن زيادة سرعة بشكل كبير.

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