SQL: ដំណើរការខ្សោយទោះបីមានសន្ទស្សន៍ក៏ដោយ

ខ្ញុំទើបតែត្រូវបានប្រឈមមុខនឹងបញ្ហានៃការអនុវត្តដូចខាងក្រោមនៃមូលដ្ឋានទិន្នន័យ SQL មួយ: នៅក្នុងតារាង SQL មួយដែលមានឈ្មោះថា "អ្នកប្រើប្រាស់" ដែលមានធាតុបញ្ចូល ~ 1,000,000 ការប្តេជ្ញាចិត្តនៃចំនួននៃការចុះឈ្មោះនៅថ្ងៃនេះចំណាយពេល 28 វិនាទីមិនអាចទទួលយកបាន។ ពេលវេលានៃការចុះឈ្មោះត្រូវបានរក្សាទុកជាទម្រង់“ Ymd H: i: s” នៅក្នុងជួរឈរ“ បង្កើត” ។


សំណួរដែលបានប្រើ

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

នាំឱ្យមានពេលវេលាផ្ទុកនេះទោះបីជាមានសន្ទស្សន៍រួចហើយនៅក្នុងជួរឈរ "បានបង្កើត" នៃទំរង់ DATETIME ក៏ដោយ

ALTER TABLE `users` ADD INDEX `created` (`created`);

ត្រូវបានកំណត់។ ហេតុផលសម្រាប់ដំណើរការមិនល្អគឺការហៅមុខងារនៃ DATE៖ ជួរឈរដែលបានធ្វើលិបិក្រម "ត្រូវបានបង្កើត" ត្រូវបានបញ្ជូនដោយមុខងារ DATE និងធ្វើឱ្យសន្ទស្សន៍មិនមានប្រសិទ្ធភាព។ កម្មវិធីបង្កើនប្រសិទ្ធិភាពសំណួរដឹងតែ "បង្កើត" ប៉ុន្តែមិនមែនលទ្ធផលនៃ DATE (បានបង្កើតទេ) ។ សំណួរដែលប្រសើរបំផុត

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

នាំឱ្យមានលទ្ធផលដែលចង់បានក្នុងរយៈពេល 0.4 វិនាទី។

ថយក្រោយ