"সারগ্যাবল" শব্দের অর্থ কী?


23

এসকিউএল সার্ভার ব্যবহারকারীরা "সার্গেবল" শব্দটি ব্যবহার করেন । আমি ভাবছি "সরগেবল" এর জন্য যদি কোনও উদ্দেশ্যমূলক বাস্তবায়ন-অজ্ঞেয়কালীন সময়কালীন সংজ্ঞা থাকে কি না।

উদাহরণস্বরূপ, WHERE foo LIKE '%bar%'অনেকে বলেছিলেন সরগেবল নয় , তবে কিছু আরডিবিএমএস এই জাতীয় প্রশ্নের উপর সূচকগুলি ব্যবহার করতে সক্ষম হয় । তারপরে "সার্গেবল নয়" এর অর্থ কী?

অন্যান্য তথ্যসূত্র


5
আপনি উল্লেখ করতে চাইতে পারেন যে আপনার প্রশ্ন এসকিউএল সার্ভার সম্পর্কে নয় বরং পরিবর্তে " সরগেবল " শব্দটি সম্পর্কে । আপনার প্রশ্নটি কেবলমাত্র এসকিউএল সার্ভারকেই রেফারেন্স করেছে কারণ এটি "% ওয়ার্ডের%" অনুসন্ধানের পূর্বাভাসগুলি পরিচালনা করতে সক্ষম নয়, যেখানে দৃশ্যত অন্যান্য আরডিবিএমএস রয়েছে।
জন ওরফে হট 2 ইউজ

উত্তর:


31

"সরগেবল" শব্দটি প্রথম প। গ্রিফিথস সেলঞ্জার এট আল দ্বারা প্রবর্তন করা হয়েছিল। তাদের 1979 পত্রিকায় "একটি রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেমে অ্যাক্সেস পাথ সিলেকশন", এসিএম দ্বারা প্রকাশিত । নন-এসিএম সদস্যদের জন্য http://cs.stanford.edu/people/chrismre/cs345/rl/selinger.pdf এ কাগজের একটি অনুলিপি রয়েছে

শব্দটি এই অনুচ্ছেদে সংজ্ঞায়িত করা হয়েছে:

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

অন্য কথায়, একটি সরগেবল প্রিডিকেট এমন যে স্টোরেজ ইঞ্জিন (অ্যাক্সেস পদ্ধতি) দ্বারা সরাসরি টেবিল বা সূচী রেকর্ড পর্যবেক্ষণ করে সমাধান করা যায়। বিপরীতক্রমে একটি অ-সরগেবল প্রিডিকেটকে পদক্ষেপ নিতে ডিবিএমএসের একটি উচ্চ স্তরের প্রয়োজন। উদাহরণস্বরূপ, WHERE lastname = 'Doe'স্টোরেজ ইঞ্জিন দ্বারা lastnameপ্রতিটি রেকর্ডের ক্ষেত্রের বিষয়বস্তুগুলি কেবল দেখে ফলাফল নির্ধারণ করা যেতে পারে । অন্যদিকে, WHERE UPPER(lastname) = 'DOE'এসকিউএল ইঞ্জিন দ্বারা একটি ক্রিয়াকলাপ সম্পাদন করা প্রয়োজন, যার অর্থ স্টোরেজ ইঞ্জিনটি পড়ার সমস্ত সারি (যদি তারা সম্ভব অন্য কোনও সাথে মিলিত হয় তবে সার্কেবল পূর্বাভাসগুলি) মূল্যায়নের জন্য এসকিউএল ইঞ্জিনকে ফিরে দিতে হবে, অতিরিক্ত সিপিইউ ব্যয় বহন করে ।

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

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

ডেটা সরগেবল পূর্বাভাসগুলি এমন পূর্বাভাস যা সূচক পরিচালক দ্বারা মূল্যায়ন করা যায় না, তবে ডেটা ম্যানেজমেন্ট সার্ভিসেস (ডিএমএস) দ্বারা মূল্যায়ন করা যায়। সাধারণত, এই পূর্বাভাসগুলি বেস টেবিল থেকে পৃথক সারি অ্যাক্সেস প্রয়োজন। প্রয়োজনে ডিএমএস প্রিডিকেট মূল্যায়নের জন্য প্রয়োজনীয় কলামগুলি পুনরুদ্ধার করবে,

এসকিউএল সার্ভার-স্পোকে সরগেবেল ভবিষ্যদ্বাণীগুলি কেবল সূচক অনুসন্ধান ব্যবহার করে সমাধান করা যেতে পারে তা সম্ভবত টেবিল স্ক্যানগুলির সময় তার স্টোরেজ ইঞ্জিনের যেমন পূর্বাভাসগুলি প্রয়োগ করতে অক্ষমতার দ্বারা নির্ধারিত হয়।

সরগেবল এবং অ-সরগেবল পূর্বাভাসগুলি মাঝে মাঝে যথাক্রমে "পর্যায় 1" এবং "পর্যায় 2" হিসাবে পূর্বাভাস দেয় (এটি ডিবি 2 পরিভাষা থেকেও আসে )। মঞ্চ 1 পূর্বাভাসগুলি সারণী বা সূচী রেকর্ড পড়ার সময় ক্যোয়ারী প্রক্রিয়াকরণের সর্বনিম্ন স্তরে মূল্যায়ন করা যেতে পারে। প্রথম স্তরের শর্তগুলির সাথে মেলে এমন সারিগুলি, যদি থাকে তবে, তা পর্যায়ের 2 পর্যায়ের, মূল্যায়নের পাঠানো হয়।


1 - সিস্টেম আর এর অংশটি হ'ল একটি টেবিলের টিপলসের দৈহিক সঞ্চয়; একটি সেগমেন্ট স্ক্যান অন্যান্য ডিবিএমএসে কোনও টেবিল স্ক্যানের সমান।

2 - আরএসআই - আরএসএস 3 ইন্টারফেস, একটি টিপল-ওরিয়েন্টেড ক্যোয়ারী ইন্টারফেস। এই আলোচনার সাথে সম্পর্কিত ইন্টারফেস ফাংশনটি হ'ল নেক্সট, যা পরবর্তী সারির মিলের ক্যোয়ারী পূর্বাভাস দেয় returns

3 - আরএসএস, বা গবেষণা স্টোরেজ সিস্টেম, সিস্টেম আর এর স্টোরেজ সাবসিস্টেম


"সরাসরি টেবিল বা সূচক রেকর্ড পর্যবেক্ষণ" এর অর্থ কী? মানে অবশ্যই = UPPER()একটি ফাংশন কল, তবে এটি memcmpনিজে থেকেই। এটি memcmpASCII ধরে এবং কেসটিকে উপেক্ষা করে (কেবল দ্বিতীয় স্তম্ভের দিকে তাকান) এমনটি লিখতে তুলনামূলক সহজ হবে । এটি কি এটিকে ব্যয়বহুল করে তোলে? এছাড়াও @ ইয়ারকিউবের উদাহরণ দেখুন, ডিবিএ.স্ট্যাকেক্সেঞ্জার
ইভান ক্যারল

4
@ ইভানক্রোল এর অর্থ স্টোরেজ ইঞ্জিনের বাইরে প্রয়োগ করা ডেটাবেস ফাংশনগুলি (যেমন ক্যোয়ারী প্রসেসর / এক্সিকিউশন ইঞ্জিন / এক্সপ্রেশন সার্ভিসের মধ্যে) সন্ধান না করে সরাসরি টেবিল বা সূচী রেকর্ডের দিকে তাকানো। ইপারক्यूबের উদাহরণে, ক্যোয়ারীটি পরিকল্পনাকারী / অপ্টিমাইজারের দ্বারা প্রাক-প্রক্রিয়াজাত হয় যে অ-SARGable অনুসন্ধানটি SARGable পদগুলিতে প্রকাশ করা হয়।
পল হোয়াইট পুনর্নির্মাণ মনিকা

কী "টেবিল বা সূচক রেকর্ড দিকে তাকিয়ে সরাসরি" মানে? আমি যে কিভাবে নিশ্চিত না ব্যাখ্যা আছি "সরাসরি টেবিল বা সূচক রেকর্ড দেখে" । কি x=0SARGable? কি -0 = +0, ' ' = ''বা স্থানিক সমতা? নিশ্চিতভাবে SARGable এমন কিছুর উদাহরণ কী হবে? যখন আপনি "স্টোরেজ ইঞ্জিনের বাইরে প্রয়োগ করা ডেটাবেস ফাংশনগুলির আশ্রয় ছাড়াই" বলেন যখন আপনি ইপারকিউবের উদাহরণ সহ DATE()যা স্টোরেজ ইঞ্জিনের অন্তর্ভুক্ত রয়েছে। কেন যে নিজেই এই SARGable হয় না?
ইভান ক্যারল

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

18

আমার জন্য, SARGable এর অর্থ এসকিউএল সার্ভার আপনার অনুসন্ধান পূর্বাভাসগুলি ব্যবহার করে একটি সূচী অনুসন্ধান করতে পারে।

আপনি কেবল এটি বলতে পারবেন না যে ডিবিএমএস কোনও সূচকটির "সুবিধা" নিতে পারে, কারণ একটি অ-সরগেবল প্রিডিকেট দিয়ে, এসকিউএল সার্ভার একটি নন-ক্লাস্টারড সূচক স্ক্যান করে শেষ করতে পারে।


পার্টিশন
নির্মূলকরণেও

9

দিমিত্রি কোরোটকেভিচ দ্বারা প্রো এসকিউএল সার্ভার ইন্টার্নাল অনুসারে :

অনুসন্ধানের আর্গুমেন্ট ABLE প্রিনিকেট হ'ল এসকিউএল সার্ভার একটি সূচক উপস্থিত থাকলে সূচক সন্ধান অপারেশনটি ব্যবহার করতে পারে।

এসআরকিএল সার্ভারটি হ'ল এক যেখানে এসকিউএল সার্ভার প্রক্রিয়া করার জন্য সূচক কী মানগুলির একক মান বা ব্যাপ্তি পৃথক করতে পারে

SARGable predicates নিম্নলিখিত অপারেটার অন্তর্ভুক্ত: =, >, >=, <, <=, IN, BETWEEN, এবং LIKE( প্রিফিক্স ম্যাচিং ক্ষেত্রে )

অ SARGable অপারেটার অন্তর্ভুক্ত: NOT, NOT IN, <>, এবং LIKE( না প্রিফিক্স ম্যাচিং ), সেইসাথে টেবিল বিরুদ্ধে ফাংশন বা গণনার ব্যবহার, এবং টাইপ ধর্মান্তর যেখানে ডাটাটাইপ নির্মিত সূচক মেটান না।

উদাহরণ :

WHERE name like 'SARGable%'
WHERE name like '%non-SARGable%'

ডেমো :

DROP TABLE dbo.Testing;
GO

CREATE TABLE Testing (
    WeirdDatatype   int NOT NULL,
    SomethingElse   char(200)
);

CREATE NONCLUSTERED INDEX IDX_ALWAYS_SARGable
    ON dbo.Testing( SomethingElse);

CREATE NONCLUSTERED INDEX IDX_NOT_ALWAYS_SARGable
    ON dbo.Testing(SomethingElse);

INSERT INTO dbo.Testing
        ( WeirdDatatype, SomethingElse )
SELECT TOP 1000 m.message_id, CONVERT(char(200), m.text)
FROM sys.messages AS m;

এখন আমরা চালান:

SELECT *
FROM dbo.Testing AS t
WHERE  t.WeirdDatatype = 1001;
SELECT *
FROM dbo.Testing AS t
WHERE t.SomethingElse LIKE 'Line%'
SELECT *
FROM dbo.Testing AS t
WHERE t.SomethingElse LIKE '%Line%'
     AND t.WeirdDatatype = 1001;

ফলাফলগুলি হ'ল:

[1]

আসুন SARGable ক্যোয়ারির বৈশিষ্ট্যগুলি দেখুন (সূচী অনুসন্ধান)

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

ক্যোয়ারী অপ্টিমাইজার শুরু এবং শেষের সূচকে কোনও সীমা নির্ধারণ করতে সক্ষম। এটির সাথে অনুসন্ধান করার জন্য একটি অনুসন্ধান যুক্তি রয়েছে।

এখন অ-SARGable ক্যোয়ারী:

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

আপনি প্রেডিকেট '% অ ..%' এর শুরুতে দেখতে পারেন যে ক্যোয়ারী অপ্টিমাইজারটি সূচকে একটি শুরু এবং শেষ বা সীমা নির্ধারণ করতে দেয় না। এটি এখন পুরো টেবিলটি অনুসন্ধান করতে হবে (স্ক্যান)।


আবার, যদি একটি সূচক পরে তৈরি করা হয় যা সমর্থন WHERE name like '%non-SARGable%'করে যা শর্তটি ব্যর্থ করে তোলে? এবং যদি তা হয় তবে আমরা একটি নির্দিষ্ট প্রয়োগের অপূর্ণতা সম্পর্কে কথা বলছি না? IE।, আমরা কি "এসকিউএল সার্ভার 2016 এর মতো ব্যয়বহুল" না বলা উচিত
ইভান ক্যারল

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

2
অবশ্যই এটি বাস্তবায়ন নির্দিষ্ট। WHERE DATE(datetime_column) = '2001-01-01'উদাহরণস্বরূপ, নতুন এসকিউএল সার্ভার সংস্করণগুলিতে "সরগেবল" (সূচী সন্ধান করা হবে) (২০০++ আমি মনে করি) তবে পুরানো ক্ষেত্রে নয়।
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.