में शामिल हों I MSSQL Server 2008 R2 का उपयोग कर रहा हूं और जब मैं इंडेक्स किए गए दृश्यों पर ठोकर खा रहा हूं तो मैं अपने विचारों को अनुकूलित करने की कोशिश कर रहा हूं। दुर्भाग्यवश मेरे अधिकांश दृश्य एक बाएं बाहरी जुड़ने का उपयोग करते हैं जो इंडेक्स किए गए दृश्यों के साथ समर्थित नहीं है। शोध के एक समूह के बाद, मुझे इस बारे में जाने का सबसे अच्छा तरीका उलझन में छोड़ दिया गया है। जिस तरह से मैं इसे देख, मैं निम्नलिखित विकल्प हैं:इंडेक्स किए गए दृश्य और बाएं एक बार और सभी
1) कन्वर्ट बाईं मिलती है आंतरिक चाल का उपयोग कर एक छोड़ दिया अनुकरण के साथ शामिल होने के लिए मिलती है करने के लिए "या (IsNull (ए) और IsNull (ख))"
मुझे यह समाधान दो स्थानों पर मिला, लेकिन प्रदर्शन हानि का उल्लेख किया गया।
2) बाईं कन्वर्ट मिलती भीतरी जुड़ जाता है और) खाली guids (00000000-0000-0000-0000-000000000000 साथ व्यर्थ स्तम्भ के nulls की जगह और मेल खाता GUID के साथ सही तालिका के एक ही पंक्ति जोड़ने के लिए।
यह सबसे स्पष्ट प्रदर्शन-वार दिखाई देता है, लेकिन ऐसा लगता है कि हर पंक्ति के लिए जगह का अपशिष्ट है जो अन्यथा नल होगा।
3) मेरे विचार को दो विचारों में विभाजित करें। पहला दृश्य मेरे तर्क का बहुमत है जो सूचकांक है। और दूसरा दृश्य पहले दृश्य से प्राप्त होता है और बाएं जोड़ता है।
यहां विचार, आधार दृश्य के माध्यम से एक प्रदर्शन लाभ हो सकता है। और यहां तक कि व्युत्पन्न दृश्य से पूछताछ करने से कम से कम प्रदर्शन लाभ प्राप्त होगा।
4) नहीं सूचकांक क्या मेरे विचार
चाहेंगे दृश्य जिस तरह से यह ऊपर दिए गए विकल्पों में से किसी की तुलना में अधिक performant होना है छोड़ने?
CREATE TABLE [dbo].[tbl_Thumbnails](
[ThumbnailId] [uniqueidentifier] NOT NULL,
[Data] [image] NULL,
[Width] [smallint] NOT NULL,
[Height] [smallint] NOT NULL
CONSTRAINT [PK_tbl_Thumbnails] PRIMARY KEY CLUSTERED
(
[ThumbnailId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_Tags](
[TagId] [uniqueidentifier] NOT NULL,
[ThumbnailId] [uniqueidentifier] NULL
CONSTRAINT [PK_tbl_Tags] PRIMARY KEY CLUSTERED
(
[TagId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE VIEW [dbo].[v_Tags] WITH SCHEMABINDING AS
SELECT dbo.tbl_Tags.TagId, dbo.tbl_Tags.ThumbnailId
FROM dbo.tbl_Tags LEFT OUTER JOIN
dbo.tbl_Thumbnails
ON dbo.tbl_Tags.ThumbnailId = dbo.tbl_Thumbnails.ThumbnailId
GO
INSERT INTO tbl_Tags VALUES ('16b23bb8-bf17-4784-b80a-220da1163584', NULL)
INSERT INTO tbl_Tags VALUES ('e8b50f03-65a9-4d1e-b3b4-268f01645c4e', 'a45e357b-ca9c-449a-aa27-834614eb3f6e')
INSERT INTO tbl_Thumbnails VALUES ('a45e357b-ca9c-449a-aa27-834614eb3f6e', NULL, 150, 150)
अब, निम्न क्वेरी पैदावार कर टेस्ट "दृश्य पर सूचकांक बनाया नहीं जा सकता":
5) विचार मैं का
मैं अपने बुनियादी परिदृश्य पटकथा के रूप में निम्नानुसार नहीं सोचा था .dbo.v_Tags "। क्योंकि यह एक वाम, अधिकार का उपयोग करता है, या पूर्ण बाहरी में शामिल होने, और कोई बाहरी अनुक्रमित विचारों में अनुमति दी जाती है मिलती है एक अंदरूनी में शामिल होने के बजाय उपयोग पर विचार करें।":
CREATE UNIQUE CLUSTERED INDEX [TagId] ON [dbo].[v_Tags]
(
[TagId] ASC
)
GO
यह व्यवहार की उम्मीद है, लेकिन आप मेरे परिदृश्य से सर्वश्रेष्ठ प्रदर्शन प्राप्त करने के लिए किस तरह की कार्रवाई की सिफारिश करेंगे? यहां घर लेना सबसे अच्छा प्रदर्शन है।
आप क्या खत्म किया था इस के साथ कर रही है से लाभ होगा अपने टेबल पर बनाया जाना? मुझे कुछ विचारों को अनुक्रमणित करने की कोशिश कर रहे एक समान मुद्दे का सामना करना पड़ रहा है। – user1948635
इसी तरह की स्थिति का सामना करना, denormalized तालिका (ट्रिगर्स या इसे अद्यतित रखने का कोई अन्य तरीका) सूची में भी एक विकल्प हो सकता है। –
मैंने बाएं जुड़ने पर इंडेक्स को भौतिक बनाने के बारे में एक बहुत ही समान प्रश्न का उत्तर दिया। हालांकि इसे करने का कोई सीधा तरीका नहीं है ... यहां विकल्प # 5 है http://stackoverflow.com/a/31171129/1902664 – cocogorilla