किसी तालिका से अंतिम पंक्ति लाने का सबसे तेज़ तरीका क्या है?


11

मेरे पास Pricesकॉलम के साथ एक PostgreSQL टेबल है :

  • price (दशमलव)
  • product_id (इंट)

created_atऔर updated_atकॉलम भी हैं।

कीमतें नियमित रूप से अपडेट होती रहती हैं और मैं पुराने मूल्य तालिका में रखता हूं। किसी दिए गए उत्पाद के लिए, तालिका में अंतिम मूल्य वर्तमान मूल्य है।

किसी विशिष्ट उत्पाद के लिए अंतिम मूल्य प्राप्त करने का सबसे कुशल तरीका क्या है:

  • product_idपिछले रिकॉर्ड के लिए सूचकांक और क्वेरी
  • activeनवीनतम मूल्य को चिह्नित करने के लिए एक तीसरा स्तंभ (बुलियन) जोड़ें और एक समग्र सूचकांक ( product_idऔर active) बनाएं
  • या कुछ और?

4
हालत के साथ एक आंशिक सूचकांक का उपयोग where activeकरना संभवतः नवीनतम उत्पाद को पुनः प्राप्त करने में और भी अधिक मदद करेगा।
a_horse_with_no_name

जवाबों:


11

आपको समाधान की परवाह किए बिना product_id पर एक सूचकांक की आवश्यकता होगी।

बशर्ते आपके पास update_at कॉलम पर एक इंडेक्स हो, और आपको केवल एक विशिष्ट उत्पाद "लाने" की आवश्यकता हो, जैसा कि आपने कहा था, तो मैं यह करूँगा:

select *
from Prices
where product_id = ?
order by updated_at desc 
limit 1

लेकिन अगर मुझे वह परिणाम नहीं मिला जो मैं चाहता था या यदि मुझे कई उत्पादों के लिए वर्तमान मूल्य प्राप्त करने की आवश्यकता है, तो मैं एक सक्रिय कॉलम जोड़ने और नया करने के अलावा अन्य सभी कीमतों के लिए एन पर सेट करने का विकल्प आज़माऊंगा। कीमतों का अद्यतन और फिर मैं एक आंशिक सूचकांक बनाऊंगा जहाँ सक्रिय रूप से a_horse_with_no_name द्वारा सुझाया गया हो। मैं वहां तभी जाऊंगा जब मुझे जरूरत होगी क्योंकि यह पिछली मूल्य पंक्तियों को सक्रिय न करने की जटिलता की एक परत जोड़ता है, आदि।


1
इस क्वेरी को कुशल होने के लिए (product_id, updated_at)- या - पर एक इंडेक्स की आवश्यकता होती है (product_id, updated_at DESC)। पर ही नहीं (updated_at)
ypercube y

5

अपने डेटाबेस के बाकी हिस्सों के ज्ञान के बिना, आप उत्पादों की कीमत प्राप्त करने में तेजी लाने के लिए गैर-सामान्य रूप का थोड़ा सा खर्च कर सकते हैं (यह मानते हुए कि प्रत्येक आइटम के लिए एक मूल्य है)।

बस अपनी तालिका में एक नया नाम last_priceटाइप priceकरें productऔर AFTER INSERT ON EACH ROWअपनी priceमेज पर एक ट्रिगर बनाएं । हर बार एक नया मूल्य बनाया जाता है, यह नवीनतम कीमत के साथ संबंधित उत्पाद को अपडेट करता है। इस तरह, जब भी आप किसी उत्पाद को लाते हैं, तो आप उसका अंतिम मूल्य भी प्राप्त करते हैं।

संस्करण 9.3 के बाद से, PostgreSQL भौतिक विचारों का समर्थन करता है। यह लिखने के लिए सामान्य रूप रखते हुए और पढ़ने के लिए सामान्य दृष्टिकोण रखते हुए, डेटा को निरूपित करने का एक अच्छा तरीका है। दृश्य के अद्यतन को Postgres 'LISTEN / NOTIFY तंत्र द्वारा ट्रिगर किया जा सकता है।


-1

आपके पास मूल्य तालिका में दिनांक और समय (प्रभाव से) के साथ एक कॉलम होना चाहिए। मूल्य अद्यतन करते समय उपयोगकर्ता अपना मूल्य दर्ज करेगा। उसके बाद desc wef लिमिट 1 के साथ केवल वैल्यू प्राप्त करें।


इस सवाल का जवाब नहीं है।
कॉलिन की हार्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.