কেন READPAST ইঙ্গিত সূচী দর্শনগুলি উপেক্ষা করার কারণ?


10

আমি READPASTআমাদের অ্যাপ্লিকেশনটির আর্থিক সাবসিস্টেমের রিসোর্স লকিং হ্রাস করতে ইঙ্গিতটি ব্যবহার করে তদন্ত করছি ।

এটি যাওয়ার মতো ভাল উপায় বলে মনে হয়েছিল কারণ আর্থিক লেনদেনের রেকর্ডগুলি কেবল কখনও যুক্ত হয়, কখনও আপডেট হয় না বা মোছা হয় না। কেবলমাত্র সারিগুলি যে এড়িয়ে চলে যাবে তা হ'ল লেনদেনের ভিতরে নতুন সারি ;োকানো হয়; লেনদেন প্রতিশ্রুতি না দেওয়া পর্যন্ত তারা কার্যকরভাবে বাইরের বিশ্বে বিদ্যমান নেই।

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

কেন হবে তা আমি নিশ্চিত নই; আমি কল্পনা করেছি যে সূচিযুক্ত দর্শনগুলি অপারেশনের সময় লক করা যেতে পারে এবং কীগুলি READPASTএকইভাবে কাজ করবে সেই চাবিগুলির অন্য কোনও সূচকের মতো হবে।

SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST)
WHERE isa.TotalOwedAmount = 0.0

এখানে চিত্র বর্ণনা লিখুন

SELECT TOP 1 isa.InvoiceId
FROM Financial_InvoiceSummaryAmounts isa
WHERE isa.TotalOwedAmount = 0.0

এখানে চিত্র বর্ণনা লিখুন

NOEXPANDপাশাপাশি একটি ইঙ্গিত যোগ করা কাজ করে বলে মনে হচ্ছে, তবে READPASTকোয়েরি অপ্টিমাইজারকে কেন এটি প্রথম স্থানে নিয়েছে (পুরো উত্তরের অংশ হিসাবে) সম্ভবত তা সম্পর্কে আরও জানতে আগ্রহী ।

উত্তর:


7

আমার নিবন্ধ থেকে উদাহরণ সারণী এবং সূচীকৃত ভিউ পুনরায় ব্যবহার NOEXPANDকরা এন্টারপ্রাইজ সংস্করণে ইঙ্গিতগুলি ব্যবহার করার আরও একটি কারণ :

CREATE TABLE dbo.T
(
    col1 integer NOT NULL
);
GO
INSERT dbo.T WITH (TABLOCKX)
    (col1)
SELECT 
    SV.number
FROM master.dbo.spt_values AS SV
WHERE 
    SV.type = N'P';
GO
CREATE VIEW dbo.VT
WITH SCHEMABINDING
AS
SELECT T.col1 
FROM dbo.T AS T;

Repro

এই ক্যোয়ারীটি সূচকযুক্ত দর্শনটির সাথে মিলিত হয়েছে (যদিও অপ্রয়োজনীয় সমষ্টি সহ):

SELECT DISTINCT
    VT.col1 
FROM dbo.VT AS VT;

সূচী দর্শন মিলছে

READPASTবেস টেবিল অ্যাক্সেস একটি ইঙ্গিত ফলাফল যুক্ত:

SELECT DISTINCT
    VT.col1 
FROM dbo.VT AS VT 
    WITH (READPAST);

ইনডেক্সেড ভিউ মিলছে না

ব্যাখ্যা

READPASTইঙ্গিতটি শব্দার্থিক-প্রভাবিত হয়। অপ্টিমাইজার পুনরায় লেখার প্রশ্নগুলিকে প্রতিহত করে যেমন ফলাফল পরিবর্তন হয়। বর্ণনা করা:

নিম্নলিখিত কোয়েরি সমস্যা ছাড়াই কার্যকর করে:

SELECT DISTINCT
    VT.col1 
FROM dbo.VT AS VT 
    WITH (READPAST);

যাহোক:

SELECT DISTINCT
    VT.col1 
FROM dbo.VT AS VT 
    WITH (READPAST)
OPTION 
    (TABLE HINT (VT, FORCESCAN));

ত্রুটি উত্পাদন করে:

এমএসজি 8722, স্তর 16, রাজ্য 1, লাইন 42
কোয়েরি কার্যকর করতে পারে না।
অভিব্যক্তি 'ভিটি' এর "WITH" ধারাটিতে শব্দার্থকে প্রভাবিত করার ইঙ্গিত 'রিডপাস্ট' প্রভাবিত করে
তবে সংশ্লিষ্ট 'টেবল হিন্ট' ধারাটিতে নয়।
বিকল্পটি (টেবিল ইঙ্গিতগুলি ...) ধারাটি পরিবর্তন করুন যাতে শব্দার্থবিজ্ঞান প্রভাবিত করার ইঙ্গিতগুলি
ধারাটির সাথে মেলে

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

যখন READPASTছাড়া ব্যবহৃত হয় NOEXPAND, ইঙ্গিতটি বেস টেবিলটিতে প্রচার করে, ভিউয়ের মিলটি (বিভিন্ন শব্দার্থবিজ্ঞান) প্রতিরোধ করে।

সহ NOEXPAND, ইঙ্গিতটি সরাসরি দেখার জন্য প্রযোজ্য, তাই কোনও সমস্যা নেই।

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