Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL प्रदर्शन अनुकूलन:डेटाटाइम फ़ील्ड द्वारा ऑर्डर करें

या तो postings (is_active, post_date) . पर एक समग्र अनुक्रमणिका बनाएं (उस क्रम में)।

इसका उपयोग is_active . पर फ़िल्टर करने के लिए किया जाएगा और post_date by द्वारा ऑर्डर करना ।

MySQL दिखाना चाहिए REF EXPLAIN EXTENDED . में इस अनुक्रमणिका पर पहुंच विधि ।

ध्यान दें कि आपके पास एक RANGE है user_offtopic_count . से अधिक फ़िल्टर करने की स्थिति , इसलिए आप इस फ़ील्ड पर किसी अनुक्रमणिका का उपयोग फ़िल्टरिंग और अन्य फ़ील्ड के अनुसार क्रमित करने में नहीं कर सकते हैं।

आपका user_offtopic_count . कितना चयनात्मक है इस पर निर्भर करता है (अर्थात कितनी पंक्तियाँ user_offtopic_count < 10 . को संतुष्ट करती हैं ), user_offtopic_count . पर एक अनुक्रमणिका बनाना अधिक उपयोगी हो सकता है और post_dates को क्रमबद्ध होने दें।

ऐसा करने के लिए, postings (is_active, user_offtopic_count) पर एक समग्र अनुक्रमणिका बनाएं और सुनिश्चित करें कि RANGE इस अनुक्रमणिका पर पहुँच विधि का उपयोग किया जाता है।

कौन सा इंडेक्स तेज होगा यह आपके डेटा वितरण पर निर्भर करता है। दोनों इंडेक्स बनाएं, FORCE उन्हें देखें और देखें कि कौन सा तेज़ है:

CREATE INDEX ix_active_offtopic ON postings (is_active, user_offtopic_count);
CREATE INDEX ix_active_date ON postings (is_active, post_date);

SELECT 
    `postings`.`id`, 
    UNIX_TIMESTAMP(postings.post_date) as post_date, 
    `postings`.`link`, 
    `postings`.`title`, 
    `postings`.`author`, 
    `postings`.`excerpt`, 
    `postings`.`long_excerpt`, 
    `feeds`.`title` AS feed_title, 
    `feeds`.`website` AS feed_website
FROM 
    `postings` FORCE INDEX (ix_active_offtopic)
JOIN 
    `feeds` 
ON 
    `feeds`.`id` = `postings`.`feed_id`
WHERE 
    `feeds`.`type` = 1 AND 
    `postings`.`user_offtopic_count` < 10 AND 
    `postings`.`is_active` = 1
ORDER BY 
    `postings`.`post_date` desc
LIMIT 
    15

/* This should show RANGE access with few rows and keep the FILESORT */

SELECT 
    `postings`.`id`, 
    UNIX_TIMESTAMP(postings.post_date) as post_date, 
    `postings`.`link`, 
    `postings`.`title`, 
    `postings`.`author`, 
    `postings`.`excerpt`, 
    `postings`.`long_excerpt`, 
    `feeds`.`title` AS feed_title, 
    `feeds`.`website` AS feed_website
FROM 
    `postings` FORCE INDEX (ix_active_date)
JOIN 
    `feeds` 
ON 
    `feeds`.`id` = `postings`.`feed_id`
WHERE 
    `feeds`.`type` = 1 AND 
    `postings`.`user_offtopic_count` < 10 AND 
    `postings`.`is_active` = 1
ORDER BY 
    `postings`.`post_date` desc
LIMIT 
    15

/* This should show REF access with lots of rows and no FILESORT */


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.sql.SQLException:परिणाम के अंत के बाद mysql में सेट करें

  2. SQL सर्वर में MySQL समतुल्य STUFF () क्या है?

  3. MySQL रैंड () फंक्शन - MySQL में एक रैंडम नंबर जेनरेट करें

  4. OSX पर रेल + MySQL:लाइब्रेरी लोड नहीं हुई:libmysqlclient.18.dylib

  5. एक स्थिर डेटाबेस वर्ग बनाने की कोशिश कर रहा हूं जिसे मैं कक्षा के बाहर किसी भी फ़ंक्शन से एक्सेस कर सकता हूं