मुझे अपनी साइट पर ऑनलाइन उपयोगकर्ताओं का ट्रैक रखने की आवश्यकता है ताकि मैं ऑनलाइन उपयोगकर्ताओं के अवतार के बगल में एक "ऑनलाइन" आइकन दिखा सकूं।मेरी माईएसQL क्वेरी तेज क्यों होती है जब मैं इसे इस तरह करता हूं और धीमा करता हूं जब मैं इसे इस तरह करता हूं?
UPDATE `users`
SET `last_seen` = CURRENT_TIMESTAMP
WHERE `user_id` = '$user_id'
अब सही इस के बाद, मैं निष्पादित करें:
इस का पता लगाने के लिए पहला कदम है जब उपयोगकर्ता पिछले देखा गया था का ट्रैक रखने के तो मैं एक अद्यतन क्वेरी हर बार उपयोगकर्ता किसी पृष्ठ का अनुरोध कर रहा हूँ है किसी अन्य क्वेरी, यह एक तो मैं उन्हें मुखपृष्ठ पर प्रदर्शित कर सकते हैं कुछ कसौटी के तहत अपनी साइट के सभी उपयोगकर्ताओं हो जाता है:
SELECT *,
(ACOS(SIN(0.7103989219783) * SIN(RADIANS(users.latitude)) + COS(0.7103989219783) * COS(RADIANS(users.latitude)) * COS(RADIANS(users.longitude) - -1.2894447135174)) * 6371) AS SearchRadius
FROM `users`
INNER JOIN `profiles` ON (
users.user_id = profiles.user_id
)
WHERE (users.latitude > 38.904216788163 AND users.latitude < 42.501503211837)
AND (users.longitude > -76.252301637251 AND users.longitude < -71.507178362749)
AND (ACOS(SIN(0.7103989219783) * SIN(RADIANS(users.latitude)) + COS(0.7103989219783) * COS(RADIANS(users.latitude)) * COS(RADIANS(users.longitude) - -1.2894447135174)) * 6371) < 200 AND users.sex = '1' AND users.seeking = '2' AND users.user_id != '1' AND users.account_status = '1' LIMIT 0, 10
कभी इस प्रश्न का पागलपन बात नहीं, मूल रूप से मैं एक ही बिंदु users
से चयन कर रहा हूँ टेबल जो मैं पहले अद्यतन किया गया था आईएनजी।
जब मैं एक के बाद इन 2 प्रश्नों एक निष्पादित इस समय मैं कर रहे हैं:
1st query: 0.0392 seconds
2nd query: 1.5396 seconds
यह पृष्ठ लोड समय में एक ध्यान देने योग्य विलंब होता है।
अब जब मैं ऑनलाइन उपयोगकर्ताओं के लिए एक अलग तालिका बनाया है और यह करने के लिए पहली क्वेरी को बदलें: बहुत तेजी से
1st query: 0.0411 seconds
2nd query: 0.0008 seconds
और पृष्ठ लोड:
UPDATE `online_users`
SET `last_seen` = CURRENT_TIMESTAMP
WHERE `user_id` = '$user_id'
बार यह करने के लिए बदल गया है!
यह क्यों है? मेरा अनुमान है कि इसमें टेबल लॉकिंग के साथ कुछ करना है, लेकिन मुझे यह सुनिश्चित करने के लिए पर्याप्त जानकारी नहीं है या अधिक जानकारी पता है।
क्या दूसरी क्वेरी अभी भी सही परिणाम लौटाती है? –
यदि आप पहली बार बिना दूसरी क्वेरी चलाते हैं तो यह तेज़ है? यह किसी प्रकार का I/O मुद्दा हो सकता है - मैं MySQL आंतरिक पर नहीं हूं, लेकिन यह ऐसी चीज नहीं होनी चाहिए जो SQL समझ में अवरुद्ध हो रही है, इसके बाद यह एक ही लेनदेन में एक ही कनेक्शन पर है, इस मामले में इसे असामान्य परिवर्तन देखने की अनुमति है या परिवर्तन पहले ही किए जा चुके हैं। क्या आप इनो डीबी या माईसाम का उपयोग कर रहे हैं? –
@ कैड रूक्स यदि मैं अकेली दूसरी क्वेरी चलाता हूं तो यह तेज़ है लेकिन केवल एक मिनट की राशि 0.0004 पर है। मैं माईसाम का उपयोग कर रहा हूँ। – TK123