में शामिल होने के साथ प्रदर्शन द्वारा क्रम में सुधार कैसे करें मैं सोशल नेटवर्क ट्रैकिंग एप्लिकेशन पर काम कर रहा हूं। उचित इंडेक्सिंग के साथ भी जुड़ा हुआ काम करता है। लेकिन जब मैं खंड द्वारा ऑर्डर जोड़ता हूं तो कुल क्वेरी निष्पादित करने में 100 गुना अधिक समय लेती है। निम्नलिखित क्वेरी मैं क्लॉज द्वारा आदेश के बिना twitter_users प्राप्त करने के लिए उपयोग किया जाता था।mysql
SELECT DISTINCT `tracked_twitter`.id
FROM tracked_twitter
INNER JOIN `twitter_content` ON `tracked_twitter`.`id` = `twitter_content`.`tracked_twitter_id`
INNER JOIN `tracker_twitter_content` ON `twitter_content`.`id` = `tracker_twitter_content`.`twitter_content_id`
AND `tracker_twitter_content`.`tracker_id` = '88'
LIMIT 20
दिखा पंक्तियों 0 - 19
(कुल 20, क्वेरी 0.0714 सेकंड लिया) लेकिन जब मैं (अनुक्रमित स्तंभ पर) खंड द्वारा आदेश जोड़ने
SELECT DISTINCT `tracked_twitter`.id
FROM tracked_twitter
INNER JOIN `twitter_content` ON `tracked_twitter`.`id` = `twitter_content`.`tracked_twitter_id`
INNER JOIN `tracker_twitter_content` ON `twitter_content`.`id` = `tracker_twitter_content`.`twitter_content_id`
AND `tracker_twitter_content`.`tracker_id` = '88'
ORDER BY tracked_twitter.followers_count DESC
LIMIT 20
दिखा पंक्तियों 0 - 19 (कुल 20, क्वेरी 13.4636 सेकंड)
ले लियाजब मैं अपने अकेले तालिका में खंड द्वारा आदेश को लागू इसमें बहुत समय लगता
SELECT * FROM `tracked_twitter` WHERE 1 order by `followers_count` desc limit 20
दिखा पंक्तियों 0 नहीं ले करता है - 19 (कुल 20, क्वेरी 0.0711 सेकंड लिया) [FOLLOWERS_COUNT: 68236387 - 10525612]
के रूप में तालिका बनाने क्वेरी इस प्रकार
CREATE TABLE IF NOT EXISTS `tracked_twitter` (
`id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`handle` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`location` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` text COLLATE utf8_unicode_ci,
`profile_image` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`followers_count` int(11) NOT NULL,
`is_influencer` tinyint(1) NOT NULL DEFAULT '0',
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`gender` enum('Male','Female','Other') COLLATE utf8_unicode_ci
DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `followers_count` (`followers_count`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
तो में शामिल होने के साथ-साथ काम करके क्वेरी और व्यवस्था गति कम नहीं हुई है जब मैं अपनी मेज पर अमल। तो मैं प्रदर्शन में सुधार कैसे कर सकता हूं?
अद्यतन 1
@GordonLinoff विधि को हल करती है अगर मैं केवल परिणाम माता पिता मेज से सेट की जरूरत है। मैं प्रति व्यक्ति संख्या ट्वीट्स जानना चाहता हूं (twitter_content की गिनती जो tracked_twitter तालिका से मेल खाती है)। मैं इसे कैसे संशोधित कर सकता हूं? और अगर मैं ट्वीट सामग्री पर गणित कार्य करना चाहता हूं तो मैं इसे कैसे कर सकता हूं ??
SELECT `tracked_twitter` . * , COUNT(*) AS twitterContentCount, retweet_count + favourite_count + reply_count AS engagement
FROM `tracked_twitter`
INNER JOIN `twitter_content` ON `tracked_twitter`.`id` = `twitter_content`.`tracked_twitter_id`
INNER JOIN `tracker_twitter_content` ON `twitter_content`.`id` = `tracker_twitter_content`.`twitter_content_id`
WHERE `is_influencer` != '1'
AND `tracker_twitter_content`.`tracker_id` = '88'
AND `tracked_twitter_id` != '0'
GROUP BY `tracked_twitter`.`id`
ORDER BY twitterContentCount DESC
LIMIT 20
OFFSET 0
यदि आप 'LIMIT'-clause को हटाते हैं तो अनियंत्रित क्वेरी कितनी देर तक लेती है? एक अनियमित परिणाम-सेट में 'LIMIT' का मूल रूप से अर्थ है" मुझे कुछ मानदंड प्राप्त करें जो मेरे मानदंड से मेल खाते हैं "जबकि आदेशित परिणाम में इसका अर्थ है" मुझे मेरे पहले मानदंडों को प्राप्त करें जो मेरे मानदंड से मेल खाते हैं "और मूल रूप से इसका मतलब है कि आपको सभी को इंडेंट करना होगा उनमें से। –
क्वेरी पर 'EXPLAIN' का आउटपुट क्या है? – raina77ow
@ raina77ow मैंने प्रश्न में चित्र समझाया – Tamizharasan