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

wp_postmeta के संदर्भ इतने धीमे क्यों हैं?

wp_postmeta . के लिए मानक स्कीमा खराब सूचकांक प्रदान करता है। इससे प्रदर्शन समस्याएं होती हैं।

इसमें स्कीमा बदलने से, मेटा डेटा के अधिकांश संदर्भ तेज़ होंगे:

CREATE TABLE wp_postmeta (
    post_id …,
    meta_key …,
    meta_value …,
    PRIMARY KEY(post_id, meta_key),
    INDEX(meta_key)
) ENGINE=InnoDB;

नोट:

  • वर्तमान AUTO_INCREMENT कॉलम स्थान की बर्बादी है, और प्रश्नों को धीमा कर देता है क्योंकि यह PRIMARY KEY है , इस प्रकार (post_id, meta_key) के "प्राकृतिक" "समग्र" PK से बचते हुए ।
  • InnoDB "क्लस्टरिंग" के कारण उस PK के प्रदर्शन को और बढ़ा देता है। (मुझे आशा है कि आप अभी भी MyISAM का उपयोग नहीं कर रहे हैं!)
  • यदि आप MySQL 5.6 (या MariaDB 10.0 या 10.1) का उपयोग कर रहे हैं, तो meta_key बदलें VARCHAR(255) . से , नहीं VARCHAR(191) . (यदि 191 पर्याप्त नहीं है, तो हम इसके कारणों और समाधान पर एक अलग प्रश्न में चर्चा कर सकते हैं।)
  • INDEX(meta_key) वैकल्पिक है, लेकिन यदि आप "एक विशेष कुंजी वाली पोस्ट ढूंढना" चाहते हैं तो इसकी आवश्यकता है।
  • चेतावनी:ये परिवर्तन कई को गति देंगे पोस्टमेटा के उपयोग, लेकिन सभी नहीं। मुझे नहीं लगता सोचता यह किसी भी उपयोग के मामलों को धीमा कर देगा। (यदि आप उनका सामना करते हैं तो कृपया ऐसे प्रश्न प्रदान करें। यह कैशिंग समस्या हो सकती है, वास्तविक गिरावट नहीं।)

यदि आप अपना . प्रस्तुत करना चाहते हैं CREATE TABLE , मैं एक ALTER प्रदान कर सकता हूँ इसे इसमें बदलने के लिए।

यदि आपको एक पद के लिए एक ही कुंजी नाम के साथ कई मेटा कुंजी रखने की क्षमता की आवश्यकता है, तो इस समाधान का उपयोग करें। यह लगभग उपरोक्त सुझाव जितना ही अच्छा है।

    meta_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,  -- keep after all
    ...
    PRIMARY KEY(post_id, meta_key, meta_id),  -- to allow dup meta_key for a post

स्रोत दस्तावेज़

संभावित परिवर्तन

चेतावनी:

  • मेरे पास इसका परीक्षण करने का कोई तरीका नहीं है।
  • यह 767 त्रुटि का समाधान नहीं करता है
  • यह meta_id रखता है क्योंकि कुछ WP उपयोगकर्ता ने बताया कि यह अन्य तालिकाओं द्वारा संदर्भित है।
  • यह मानता है कि आपके पास (post_id, meta_key) कॉम्बो के लिए कई पंक्तियाँ हो सकती हैं। (यह खराब स्कीमा डिज़ाइन जैसा लगता है?)
  • यह सब सामान्य SELECTs को गति देने के लिए किया जाता है पोस्टमेटा शामिल है।
  • यह संभवतः woocommerce पर भी लागू होता है।
  • यदि आप इसका उपयोग करते हैं, तो कृपया अपने डेटाबेस को डंप करें और परेशानी की स्थिति में इसे पुनः लोड करने के लिए तैयार रहें।

एसक्यूएल:

ALTER TABLE wp_postmeta
    DROP PRIMARY KEY,
    DROP INDEX post_id,
    ADD PRIMARY KEY(post_id, meta_key, meta_id),  -- to allow dup meta_key for a post
    ADD INDEX(meta_id);    -- to keep AUTO_INCREMENT happy



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जावा - स्टैंडअलोन एप्लिकेशन के लिए डेटासोर्स - कोई एप्लिकेशन सर्वर नहीं

  2. MySQL में माइनस ऑपरेशन करने की कोशिश कर रहा है

  3. MySQL क्वेरी टाइमिंग आउट:(70100):क्वेरी निष्पादन बाधित हो गया था

  4. मुझे याद रखने की सुविधा कैसे लागू करें?

  5. मैसकल ड्राइवर की समस्या