नॉन-एंटरपेज़ संस्करण और प्रदर्शन के लिए नोफ़ैंडैंड संकेत


11

मुझे प्रदर्शन तक पहुंचने के लिए अनुक्रमित विचारों का उपयोग करना होगा। जैसा कि मैं इस तुलना तालिका से देख सकता हूँ मानक संस्करण अनुक्रमित विचारों का समर्थन नहीं करता है। लेकिन BOL का कहना है:

अनुक्रमित विचार SQL सर्वर के किसी भी संस्करण में बनाए जा सकते हैं। SQL सर्वर एंटरप्राइज़ में, क्वेरी ऑप्टिमाइज़र स्वचालित रूप से अनुक्रमित दृश्य पर विचार करता है। अन्य सभी संस्करणों में अनुक्रमित दृश्य का उपयोग करने के लिए, NOEXPAND तालिका संकेत का उपयोग किया जाना चाहिए।

तो यह काम करेगा (मैं प्रदर्शन के बारे में बात कर रहा हूँ)

select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)

SQL सर्वर मानक संस्करण पर और साथ ही यह काम करता है

select * from dbo.OrderTotals

एंटरप्राइज वन पर?

यहाँ देखने के लिए कोड है:

CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select 
    OrderId     =   r.OrderId                   
  , TotalQty            =   SUM(r.Quantity)
  , TotalGrossConsid    =   SUM(r.Price * r.Quantity)
  , XCount      =   COUNT_BIG(*)
from dbo.Order r
group by r.OrderId

CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)

जवाबों:


14

अंतर यह है कि संकेत के बिना एंटरप्राइज़ संस्करण अनुक्रमित दृश्य का उपयोग न करने का निर्णय ले सकता है, लेकिन इसके बजाय बेस टेबल।

मेरा व्यक्तिगत अनुभव यह है कि SQL सर्वर इस में कुछ हद तक साहसी है। मुझे लगभग हमेशा संकेत का उपयोग करना पड़ता है: क्वेरी बहुत कम आईओ के साथ तेज है, भले ही योजना "दिखता है" आधार तालिकाओं पर नहीं सूचकांक को देखने के दृश्य पर एक स्कैन के साथ "बदतर" है। और यह लगातार और भी अधिक चलता है

YMMV बेशक :-)

तो, जवाब देने के लिए, मैंने जो देखा है, उसी के आधार पर काम करना चाहिए (चाहिए?)। अन्य लोगों के अलग-अलग अनुभव हो सकते हैं और मुझे अन्य उत्तरों में दिलचस्पी है

संकेत का उपयोग करने से बचने के लिए हर जगह आप अनुक्रमित दृश्य को संकेत के साथ किसी अन्य दृश्य में लपेट सकते हैं: संकेत सभी बाहरी प्रश्नों के लिए अंदर की ओर प्रचारित करते हैं, स्वचालित रूप से NOEXPAND होगा।


जब मुझे ऑर्डरटेबल्स के साथ ऑर्डर * से (noexpand, index = IXCU_xxx) से चुनिंदा * के साथ बाहरी दृश्य बनाने का प्रयास करने पर "इंडेक्स संकेत एक स्कीमा-बाउंड ऑब्जेक्ट के भीतर निर्दिष्ट नहीं किया जा सकता" मिला। :)
Garik

2
@garik: मैं सिर्फ NOEXPAND, इंडेक्स संकेत नहीं होगा। वैसे भी केवल एक ही इंडेक्स है: यह क्लस्टर्ड है इसलिए टेबल स्कैन = इंडेक्स स्कैन
gbn

कोई चर्चा नहीं। बंद :)
Garik

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