में उच्च प्रदर्शन वृक्ष दृश्य को कार्यान्वित करने के लिए कैसे पेड़ का प्रतिनिधित्व करने वाली तालिका बनाने का सबसे अच्छा तरीका क्या है? मैं एक चयन, सम्मिलित, अद्यतन और हटा देना चाहता हूं जो बड़े डेटा के साथ अच्छी तरह से काम करेगा। उदाहरण के लिए चयन को "सभी का विस्तार करें" का समर्थन करना होगा - किसी दिए गए नोड के लिए सभी बच्चों (और वहां बच्चे) प्राप्त करना।SQL सर्वर 2005
उत्तर
CTE
का उपयोग करें।
पेड़ की तरह तालिका संरचना को देखते हुए:
id parent name
1 0 Electronics
2 1 TV
3 1 Hi-Fi
4 2 LCD
5 2 Plasma
6 3 Amplifiers
7 3 Speakers
, इस क्वेरी id
, parent
और गहराई स्तर वापस आ जाएगी, एक पेड़ के रूप आदेश दिया:
WITH v (id, parent, level) AS
(
SELECT id, parent, 1
FROM table
WHERE parent = 0
UNION ALL
SELECT id, parent, v.level + 1
FROM v
JOIN table t
ON t.parent = v.id
)
SELECT *
FROM v
id parent name
1 0 Electronics
2 1 TV
4 2 LCD
5 2 Plasma
3 1 Hi-Fi
6 3 Amplifiers
7 3 Speakers
बदलें parent = @parent
साथ parent = 0
केवल प्राप्त करने के लिए एक पेड़ की एक शाखा।
प्रदान किया गया है table (parent)
पर एक सूचकांक है, यह क्वेरी कुशलतापूर्वक एक बहुत बड़ी मेज पर काम करेगी, क्योंकि यह प्रत्येक माता-पिता के लिए सभी चिल्डर्डन खोजने के लिए INDEX LOOKUP
का पुनरावृत्तिपूर्वक उपयोग करेगी।
WITH v (id, parent, level) AS
(
SELECT id, parent, 1
FROM table
WHERE parent = 0
UNION ALL
SELECT id, parent, v.level + 1
FROM v
JOIN table t
ON t.parent = v.id
)
UPDATE table t
SET column = newvalue
WHERE t.id IN
(
SELECT id
FROM v
)
जहां @parent
शाखा की जड़ है:
एक निश्चित शाखा, इस मुद्दे को अपडेट करें।
पदानुक्रम की समस्या से निपटने के कई तरीकों के लिए Joe Celko's book on trees and hierarchies देखें। आपके द्वारा चुने गए मॉडल पर निर्भर करेगा कि आप वज़न लुकअप बनाम अपडेट बनाम जटिलता कैसे बनाते हैं। आप आसन्नता सूची मॉडल का उपयोग करके लुकअप को बहुत तेजी से (विशेष रूप से सभी बच्चों को नोड में प्राप्त करने के लिए) बना सकते हैं, लेकिन पेड़ के अपडेट धीमे होते हैं।
धन्यवाद मैं इसे देख लूंगा। संघ फिर रिकर्सिव के बाद और अधिक कुशल है? मैंने सुना है कि mssql 2005 के पेड़ से निपटने का एक नया तरीका है, क्या आप जानते हैं कि यह बड़े डीबी के साथ अच्छा काम करता है? – SirMoreno
यूनियन सभी एक सीटीई के भीतर रिकर्सिव है, हालांकि मुझे यकीन नहीं है कि SQL सर्वर दृश्यों के पीछे इसे कैसे संभालता है या यदि इसमें प्रदर्शन में बदलाव होता है। प्रदर्शन के बारे में निश्चित रूप से कहने के लिए मैंने सीटीई के साथ पर्याप्त बड़े पैमाने पर परीक्षण नहीं किया है। –
आपको खुद को ये प्रश्न पहले पूछना होगा: 1) संशोधन बनाम पाठ का अनुपात क्या है? (= ज्यादातर स्थिर पेड़ या लगातार बदल रहे हैं?) 2) पेड़ कितनी गहरी और कितनी बड़ी उम्मीद है?
नेस्टेड सेट ज्यादातर स्थैतिक पेड़ों के लिए बहुत अच्छे हैं जहां आपको पूरी शाखाओं पर संचालन की आवश्यकता होती है। यह बिना किसी समस्या के गहरे पेड़ों को संभालता है।
भौतिक मार्ग गतिशील/अनुमानित गहराई वाले गतिशील (बदलते) पेड़ों के लिए अच्छी तरह से काम करता है।
रिकर्सिव सीटीई बहुत छोटे पेड़ों के लिए आदर्श हैं, लेकिन शाखा संचालन ("इस शाखा में सभी बच्चों को प्राप्त करें ..") गहरे/बड़े पेड़ के साथ बहुत महंगा हो जाते हैं।
http://www.sqlteam.com/article/more-trees-hierarchies-in-sql
मेरा पेड़ बहुत गतिशील है, कई अपडेट हैं लेकिन कई भी चुनते हैं। और मैं 10-15 के स्तर के रूप में गहराई से प्राप्त करने में सक्षम होना चाहता हूं। मुझे इस आलेख को नेस्टेड सेट के बारे में मिला: http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/swinging-from-tree-to-tree-using-ctes-part-1-adjacency -to-nested-sets.aspx क्या इस आलेख में वर्णित जैसा नेस्टेड सेट मेरा सबसे अच्छा विकल्प होगा? धन्यवाद। – SirMoreno
आप कई अद्यतन और चयन किया है, तो सबसे अच्छा विकल्प पथ गणन मॉडल है, जो संक्षेप में यहाँ वर्णित है प्रतीत हो रहा है । पढ़ने के लिए बहुत ही कुशल और लिखने के लिए बहुत आसान है।
मैं हैरान हूँ कि कोई भी उल्लेख किया है एक Closure Table के साथ जा रहा:
- 1. SQL सर्वर 2005 (SQL Server 2005)
- 2. SQL सर्वर 2005
- 3. SQL सर्वर 2005
- 4. SQL सर्वर 2005
- 5. SQL सर्वर 2005 डेटाबेस
- 6. SQL सर्वर 2005
- 7. मैं SQL सर्वर 2005
- 8. SQL सर्वर 2005
- 9. SQL सर्वर 2005 प्रतिकृति
- 10. SQL सर्वर 2005 डेटाबेस
- 11. मैं SQL सर्वर 2005
- 12. SQL सर्वर 2005
- 13. SQL सर्वर 2005
- 14. SQL सर्वर 2005
- 15. SQL सर्वर 2005
- 16. स्प्लिट Sql सर्वर 2005
- 17. SQL सर्वर 2005
- 18. SQL सर्वर 2005
- 19. SQL सर्वर 2005
- 20. मैं SQL सर्वर 2005
- 21. मैं SQL सर्वर 2005
- 22. SQL सर्वर 2005 डेटाबेस
- 23. SQL सर्वर 2005
- 24. SQL सर्वर 2005 डेटाबेस
- 25. SQL सर्वर 2005/2008
- 26. SQL सर्वर 2005
- 27. SQL सर्वर 2005 को SQL Server 2005 को डाउनग्रेड करना
- 28. SQL सर्वर 2005 कॉल/क्वेरी
- 29. SQL सर्वर प्रबंधन स्टूडियो 2005
- 30. SQL सर्वर प्रबंधन स्टूडियो 2005
क्या आप टेबल संरचना के बारे में विस्तार से बता सकते हैं? क्या यह प्रश्न एक बड़े डीबी के साथ अच्छी तरह से काम करेगा? – SirMoreno
धन्यवाद, गहरा अपडेट कैसे कर सकता है? - माता-पिता के नीचे सभी नोड्स अपडेट करें? (पोते सहित) – SirMoreno
अरे, मैं इसे काम करने की कोशिश कर रहा हूं, और ऐसा लगता है कि vq आइटम dossent work, मैं 2008 में कोशिश कर रहा हूं।डेटाबेस में स्तर को भी संग्रहीत किया जाना चाहिए, क्योंकि यह तालिका में नहीं दिखाया गया है? –