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