কোন সূচকগুলি নির্বাচিত হচ্ছে একটি সূচক ভিউয়ের ক্লাস্টারড ইনডেক্সে যায়?


19

সংক্ষেপে
কোন কারণগুলিতে তারা সূচকযুক্ত দর্শনের সূচকটি অপ্টিমাইজারের নির্বাচনের প্রশ্ন জিজ্ঞাসা করে?

আমার জন্য, সূচকযুক্ত দর্শনগুলি অপ্টিমাইজার কীভাবে সূচকগুলি তুলবে সে সম্পর্কে আমি যা বুঝি তা অস্বীকার করে বলে মনে হচ্ছে। আমি এর আগে জিজ্ঞাসা করেছি , কিন্তু ওপি খুব ভাল গ্রহণ করা হয়নি। আমি সত্যিই গাইডপোস্টগুলি খুঁজছি , তবে আমি একটি ছদ্ম উদাহরণটি উপস্থাপন করব, তারপরে প্রচুর ডিডিএল, আউটপুট, উদাহরণ সহ প্রকৃত উদাহরণ পোস্ট করব।

ধরুন আমি এন্টারপ্রাইজ 2008+ ব্যবহার করছি, বুঝুন with(noexpand)

সিউডোর উদাহরণ

এই ছদ্ম উদাহরণটি ধরুন: আমি 22 টি যোগ দিয়ে, 17 টি ফিল্টার এবং একটি সার্কাসের পনি দিয়ে একটি ভিউ তৈরি করি যা 10 মিলিয়ন সারি টেবিলগুলির একগুচ্ছকে অতিক্রম করে। এই দৃশ্যটি ব্যয়বহুল (হ্যাঁ, মূলধন ই সহ) ize আমি স্কেমেবাইন্ড করব এবং ভিউটি সূচক করব। তারপরে ক SELECT a,b FROM AnIndexedView WHERE theClusterKeyField < 84। অপ্টিমাইজার যুক্তিতে যা আমাকে অন্তর্ভুক্ত করে অন্তর্নিহিত যোগদানগুলি সম্পাদন করে।

ফলাফল:

  • কোনও ইঙ্গিত নেই: 4825 720 সারি, 76 মিমির উপরে 47 সিপিইউ এবং 0.30523 এর আনুমানিক উপ-গাছের দাম পড়বে।
  • ইঙ্গিত সহ: 17 টি পড়ছে, 720 টি সারি, 4 এসএমের চেয়ে 15 টি সিপিইউ, এবং আনুমানিক সাবট্রি ব্যয় 0.007253

তাহলে এখানে কি হচ্ছে? আমি এটি এন্টারপ্রাইজ 2008, 2008-আর 2 এবং 2012 এ চেষ্টা করেছি every প্রতিটি মেট্রিকের মাধ্যমে আমি ভিউয়ের সূচকটি ব্যবহার করা আরও বেশি দক্ষ বলে মনে করতে পারি। আমার কাছে প্যারামিটার স্নিফিং ইস্যু বা স্কিউ ডেটা নেই, কারণ এটি অ্যাড হক h

একটি বাস্তব (দীর্ঘ) উদাহরণ

আপনি যদি কোনও স্পর্শবাদী না হন তবে সম্ভবত আপনার এই অংশটি পড়ার প্রয়োজন নেই বা চান না।

সংস্করণ
হ্যাঁ, এন্টারপ্রাইজ।

মাইক্রোসফ্ট এসকিউএল সার্ভার 2012 - 11.0.2100.60 (X64) ফেব্রুয়ারী 10 2012 19:39:15 কপিরাইট (গ) মাইক্রোসফ্ট কর্পোরেশন এন্টারপ্রাইজ সংস্করণ (-৪-বিট) উইন্ডোজ এনটি 6.2 (বিল্ড 9200:) (হাইপারভাইজার)

দৃশ্য

CREATE VIEW dbo.TimelineMaterialized    WITH SCHEMABINDING
AS
SELECT  TM.TimelineID,
        TM.TimelineTypeID,
        TM.EmployeeID,
        TM.CreateUTC,
        CUL.CultureCode,
        CASE 
           WHEN TM.CustomerMessageID    > 0 THEN TM.CustomerMessageID
           WHEN TM.CustomerSessionID    > 0 THEN TM.CustomerSessionID
           WHEN TM.NewItemTagID         > 0 THEN TM.NewItemTagID
           WHEN TM.OutfitID             > 0 THEN TM.OutfitID
           WHEN TM.ProductTransactionID > 0 THEN TM.ProductTransactionID
           ELSE 0 END  As HrefId,
        CASE 
          WHEN TM.CustomerMessageID    > 0 THEN IsNull(C.Name, 'N/A')   
          WHEN TM.CustomerSessionID    > 0 THEN IsNull(C.Name, 'N/A')
          WHEN TM.NewItemTagID         > 0 THEN IsNull(NI.Title, 'N/A')
          WHEN TM.OutfitID             > 0 THEN IsNull(O.Name, 'N/A')
          WHEN TM.ProductTransactionID > 0 THEN IsNull(PT_PL.NameLocalized, 'N/A')
                 END as HrefText

FROM       dbo.Timeline TM
INNER JOIN dbo.CustomerSession    CS    ON TM.CustomerSessionID    = CS.CustomerSessionID
INNER JOIN dbo.CustomerMessage    CM    ON TM.CustomerMessageID    = CM.CustomerMessageID
INNER JOIN dbo.Outfit             O     ON PO.OutfitID             = O.OutfitID
INNER JOIN dbo.ProductTransaction PT    ON TM.ProductTransactionID = PT.ProductTransactionID
INNER JOIN dbo.Product            PT_P  ON PT.ProductID            = PT_P.ProductID
INNER JOIN dbo.ProductLang        PT_PL ON PT_P.ProductID          = PT_PL.ProductID
INNER JOIN dbo.Culture            CUL   ON PT_PL.CultureID         = CUL.CultureID
INNER JOIN dbo.NewsItemTag        NIT   ON TM.NewsItemTagID        = NIT.NewsItemTagID
INNER JOIN dbo.NewsItem           NI    ON NIT.NewsItemID          = NI.NewsItemID
INNER JOIN dbo.Customer           C     ON  C.CustomerID = CASE 
                                             WHEN TM.TimelineTypeID = 1 THEN CM.CustomerID 
                                             WHEN TM.TimelineTypeID = 5 THEN CS.CustomerID
                                             ELSE 0 END

WHERE        CUL.IsActive = 1

ক্লাস্টার্ড সূচক

CREATE UNIQUE CLUSTERED INDEX PK_TimelineMaterialized  ON 
                   TimelineMaterialized (EmployeeID, CreateUTC, CultureCode, TimelineID)

এসকিউএল পরীক্ষা করুন

-- NO HINT - - -  - - -  - - -  - - -  - - - 
SELECT  *                 --yes yes, star is bad ...just a test example
FROM    TimelineMaterialized TM 
WHERE 
            TM.EmployeeID   = 2
        AND TM.CultureCode  = 'en-US'
        AND TM.CreateUTC    > '9/10/2012'
        AND TM.CreateUTC    < '9/11/2012'

-- WITH HINT - - -  - - -  - - -  - - -  - - - 
SELECT  *               
FROM    TimelineMaterialized TM with(noexpand)
WHERE 
            TM.EmployeeID   = 2
        AND TM.CultureCode  = 'en-US'
        AND TM.CreateUTC    > '9/10/2012'
        AND TM.CreateUTC    < '9/11/2012'

ফলাফল = আউটপুট 11 টি সারি

আউটপুট 11 সারি - উভয় প্রশ্নের জন্য একই

প্রোফাইলার আউটপুট
শীর্ষ 4 লাইন কোনও ইঙ্গিত ছাড়াই রয়েছে। নীচের 4 টি লাইনগুলি ইঙ্গিতটি ব্যবহার করছে।

প্রোফাইলার

এক্সিকিউশন কামাল
SQLPlan বিন্যাসে উভয় এক্সেকিউশন পরিকল্পনা জন্য GitHub সারকথা

কোনও হিন্ট এক্সিকিউশন পরিকল্পনা নেই - ক্লাস্টারড ইনডেক্সটি কেন আপনি মিঃ এসকিউএলকে দিয়েছি না? এটি 3 ফিল্টার ক্ষেত্রগুলিতে ক্লাস্টারড। এটি ব্যবহার করে দেখুন, আপনি এটা পছন্দ করতে পারেন।
কোনও ইঙ্গিত নেই - বিশাল বাস্তবায়ন পরিকল্পনা

একটি ইঙ্গিত ব্যবহার করার সময় সহজ পরিকল্পনা।

ইঙ্গিত ব্যবহার করে - সাধারণ সম্পাদন পরিকল্পনা


উত্তর:


26

তাত্ক্ষণিকভাবে দেখা ভিউগুলি তুলনামূলকভাবে ব্যয়বহুল অপারেশন *, সুতরাং অপ্টিমাইজার প্রথমে অন্যান্য দ্রুত এবং সহজ রূপান্তর চেষ্টা করে। সেগুলি যদি কোনও সস্তা পরিকল্পনা তৈরি করে থাকে (আপনার ক্ষেত্রে 0.05 ইউনিট) অপ্টিমাইজেশানটি শীঘ্রই শেষ হবে। বাজি হ'ল চালিয়ে যাওয়া অপ্টিমাইজেশনটি এটি সংরক্ষণের চেয়ে বেশি সময় ব্যয় করবে। অপ্টিমাইজারের প্রাথমিক লক্ষ্যটি দ্রুত 'যথেষ্ট ভাল' পরিকল্পনা Remember

ব্যবহারভিউতে ক্লাস্টারড ইনডেক্স করা নিজের পক্ষে ব্যয়বহুল নয়, তবে লজিক্যাল ক্যোয়ারী ট্রিটিকে সম্ভাব্য সূচকযুক্ত দর্শনগুলির সাথে মিলানোর প্রক্রিয়া হতে পারে। যেমনটি আমি অন্য প্রশ্নের একটি মন্তব্যে উল্লেখ করেছি, ক্যোয়ারীতে ভিউ রেফারেন্সটি অপ্টিমাইজেশনের আগে প্রসারিত হয়েছে, সুতরাং অপ্টিমাইজারটি জানেন না যে আপনি প্রথম স্থানে ভিউয়ের বিপরীতে কোয়েরিটি লিখেছেন - এটি কেবল প্রসারিত গাছ দেখায় (যেন দৃশ্যটি রেখাযুক্ত ছিল।

"গুড ইনফ প্ল্যান" মানে অপ্টিমাইজারটি একটি শালীন পরিকল্পনা খুঁজে পেয়েছিল এবং অনুসন্ধানের পর্যায়ে তাড়াতাড়ি থামে। "টাইমআউট" এর অর্থ এটি বর্তমান পর্বের শুরুতে নিজেকে 'বাজেট' হিসাবে সেট করার অপ্টিমাইজেশন পদক্ষেপের সংখ্যা ছাড়িয়ে গেছে।

পূর্ববর্তী পর্বে পাওয়া সেরা পরিকল্পনার ব্যয়ের ভিত্তিতে বাজেট সেট করা হয়েছে। এ জাতীয় স্বল্প ব্যয়ের প্রশ্নের সাথে (০.০৫) বাজেটেড মুভগুলির সংখ্যাটি খুব সামান্য হবে এবং আপনার নমুনা ক্যোয়ারিতে জড়িতদের সংখ্যার ভিত্তিতে নিয়মিত রূপান্তর দ্বারা দ্রুত ক্লান্ত হয়ে পড়েছে (উদাহরণস্বরূপ অভ্যন্তরীণ যোগদানের পুনঃবিন্যাসের প্রচুর উপায় রয়েছে) ।

যদি সূচীকরণ ভিউয়ের মিলটি কেন ব্যয়বহুল, এবং সেইজন্য অপ্টিমাইজেশনের পরবর্তী ধাপগুলি এবং / অথবা কেবলমাত্র আরও ব্যয়বহুল প্রশ্নের জন্য বিবেচিত হয় সে সম্পর্কে আপনি যদি জানতে আগ্রহী হন তবে এখানে (পিডিএফ) এবং এখানে দুটি বিষয় মাইক্রোসফ্ট রিসার্চ পেপার রয়েছে। সূচীকরণ ভিউয়ের মিলটি (সিটিসিয়ার বিষয়টিতে are )।

আরেকটি প্রাসঙ্গিক কারণ হ'ল সূচকযুক্ত ভিউয়ের মিলটি অপটিমাইজেশন পর্ব 0 (লেনদেন প্রক্রিয়াজাতকরণ) তে উপলব্ধ নয়।

আরও পড়া:

সূচী দর্শন এবং পরিসংখ্যান

* এবং কেবল এন্টারপ্রাইজ সংস্করণে উপলব্ধ (বা সমতুল্য)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.