আমার কাছে ক্লাসের ক্লাস রয়েছে যা দুটি জিনিসের মধ্যে একটির অস্তিত্বের জন্য পরীক্ষা করে। এটা ফর্ম হয়
SELECT CASE
WHEN EXISTS (SELECT 1 FROM ...)
OR EXISTS (SELECT 1 FROM ...)
THEN 1 ELSE 0 END;
আসল বিবৃতি সিতে উত্পন্ন হয় এবং একটি ওডিবিসি সংযোগের জন্য অ্যাড-হক ক্যোয়ারী হিসাবে কার্যকর করা হয়।
এটি সম্প্রতি প্রকাশিত হয়েছে যে দ্বিতীয় সেক্টর সম্ভবত বেশিরভাগ ক্ষেত্রে প্রথম নির্বাচন বাছাইয়ের চেয়ে দ্রুততর হবে এবং দুটি সন্ধানের ধারাটির ক্রমটি বদলে কমপক্ষে একটি আপত্তিজনক পরীক্ষার ক্ষেত্রে আমরা সবেমাত্র তৈরি করেছি।
সুস্পষ্ট কাজটি হ'ল কেবল এগিয়ে যাওয়া এবং দুটি ধারাটি স্যুইচ করা, তবে আমি দেখতে চেয়েছিলাম এসকিউএল সার্ভারের সাথে আরও পরিচিত কেউ এই বিষয়ে বিবেচনা করতে আগ্রহী কিনা। মনে হচ্ছে আমি কাকতালীয় এবং "বাস্তবায়নের বিশদ" এর উপর নির্ভর করছি।
(এটিও মনে হয় যদি এসকিউএল সার্ভারটি আরও চৌকস হয় তবে এটি সমান্তরালভাবে উভয় বিদ্যমান ধারাগুলি কার্যকর করে এবং যে কোনও একটি প্রথমে শর্ট সার্কিটটি সম্পন্ন করে let
এসকিউএল সার্ভারকে এই জাতীয় কোয়েরির চলমান সময়কে ধারাবাহিকভাবে উন্নত করার জন্য আরও ভাল উপায় কী?
হালনাগাদ
আপনার সময় এবং আমার প্রশ্নের আগ্রহের জন্য আপনাকে ধন্যবাদ। আমি প্রকৃত ক্যোয়ারী পরিকল্পনাগুলি সম্পর্কে প্রশ্নগুলির প্রত্যাশা করছিলাম না, তবে আমি সেগুলি ভাগ করতে রাজি আছি।
এটি এমন কোনও সফ্টওয়্যার উপাদানগুলির জন্য যা এসকিউএল সার্ভার 2008R2 এবং আরও বেশি সমর্থন করে। কনফিগারেশন এবং ব্যবহারের উপর নির্ভর করে ডেটার আকারটি বেশ আলাদা হতে পারে। আমার সহকর্মী ক্যোয়ারিতে এই পরিবর্তনটি করার কথা ভেবেছিলেন কারণ (উদাহরণস্বরূপ) dbf_1162761$z$rv$1257927703সারণীতে সর্বদা এতে dbf_1162761$z$dd$1257927703সারণির তুলনায় সারি সংখ্যার চেয়ে বড় বা সমান হবে - কখনও কখনও উল্লেখযোগ্য পরিমাণে আরও বেশি (প্রস্থের আদেশ)।
এখানে আমি আপত্তিজনক মামলা উল্লেখ করেছি। প্রথম ক্যোয়ারীটি ধীর এবং প্রায় 20 সেকেন্ড সময় নেয়। দ্বিতীয় ক্যোয়ারী তাত্ক্ষণিকভাবে সম্পূর্ণ হয়।
এটির মূল্যের জন্য, "অপটিমাইজ ফর আনকনউন" বিটটি সম্প্রতি যুক্ত করা হয়েছিল কারণ প্যারামিটার স্নিফিং কিছু নির্দিষ্ট ক্ষেত্রে ট্র্যাশ করছে।
মূল ক্যোয়ারী:
SELECT CASE
WHEN EXISTS (SELECT 1 FROM zumero.dbf_1162761$z$rv$1257927703 rv INNER JOIN zumero.dbf_1162761$t$tx tx ON tx.txid=rv.txid WHERE tx.generation BETWEEN 1500 AND 2502)
OR EXISTS (SELECT 1 FROM zumero.dbf_1162761$z$dd$1257927703 dd INNER JOIN zumero.dbf_1162761$t$tx tx ON tx.txid=dd.txid WHERE tx.generation BETWEEN 1500 AND 2502)
THEN 1 ELSE 0 END
OPTION (OPTIMIZE FOR UNKNOWN)
মূল পরিকল্পনা:
|--Compute Scalar(DEFINE:([Expr1006]=CASE WHEN [Expr1007] THEN (1) ELSE (0) END))
|--Nested Loops(Left Semi Join, DEFINE:([Expr1007] = [PROBE VALUE]))
|--Constant Scan
|--Concatenation
|--Nested Loops(Inner Join, WHERE:([scale].[zumero].[dbf_1162761$z$rv$1257927703].[txid] as [rv].[txid]=[scale].[zumero].[dbf_1162761$t$tx].[txid] as [tx].[txid]))
| |--Clustered Index Scan(OBJECT:([scale].[zumero].[dbf_1162761$z$rv$1257927703].[PK__dbf_1162__97770A2F62EEAE79] AS [rv]), WHERE:([scale].[zumero].[dbf_1162761$z$rv$1257927703].[txid] as [rv].[txid]>(0)))
| |--Index Seek(OBJECT:([scale].[zumero].[dbf_1162761$t$tx].[gendex] AS [tx]), SEEK:([tx].[generation] >= (1500) AND [tx].[generation] <= (2502)) ORDERED FORWARD)
|--Nested Loops(Inner Join, OUTER REFERENCES:([tx].[txid]))
|--Clustered Index Scan(OBJECT:([scale].[zumero].[dbf_1162761$t$tx].[PK__dbf_1162__E3BA953EC2197789] AS [tx]), WHERE:([scale].[zumero].[dbf_1162761$t$tx].[generation] as [tx].[generation]>=(1500) AND [scale].[zumero].[dbf_1162761$t$tx].[generation] as [tx].[generation]<=(2502)) ORDERED FORWARD)
|--Index Seek(OBJECT:([scale].[zumero].[dbf_1162761$z$dd$1257927703].[n$dbf_1162761$z$dd$txid$1257927703] AS [dd]), SEEK:([dd].[txid]=[scale].[zumero].[dbf_1162761$t$tx].[txid] as [tx].[txid]), WHERE:([scale].[zumero].[dbf_1162761$z$dd$1257927703].[txid] as [dd].[txid]>(0)) ORDERED FORWARD)
স্থির ক্যোয়ারী:
SELECT CASE
WHEN EXISTS (SELECT 1 FROM zumero.dbf_1162761$z$dd$1257927703 dd INNER JOIN zumero.dbf_1162761$t$tx tx ON tx.txid=dd.txid WHERE tx.generation BETWEEN 1500 AND 2502)
OR EXISTS (SELECT 1 FROM zumero.dbf_1162761$z$rv$1257927703 rv INNER JOIN zumero.dbf_1162761$t$tx tx ON tx.txid=rv.txid WHERE tx.generation BETWEEN 1500 AND 2502)
THEN 1 ELSE 0 END
OPTION (OPTIMIZE FOR UNKNOWN)
স্থির পরিকল্পনা:
|--Compute Scalar(DEFINE:([Expr1006]=CASE WHEN [Expr1007] THEN (1) ELSE (0) END))
|--Nested Loops(Left Semi Join, DEFINE:([Expr1007] = [PROBE VALUE]))
|--Constant Scan
|--Concatenation
|--Nested Loops(Inner Join, OUTER REFERENCES:([tx].[txid]))
| |--Clustered Index Scan(OBJECT:([scale].[zumero].[dbf_1162761$t$tx].[PK__dbf_1162__E3BA953EC2197789] AS [tx]), WHERE:([scale].[zumero].[dbf_1162761$t$tx].[generation] as [tx].[generation]>=(1500) AND [scale].[zumero].[dbf_1162761$t$tx].[generation] as [tx].[generation]<=(2502)) ORDERED FORWARD)
| |--Index Seek(OBJECT:([scale].[zumero].[dbf_1162761$z$dd$1257927703].[n$dbf_1162761$z$dd$txid$1257927703] AS [dd]), SEEK:([dd].[txid]=[scale].[zumero].[dbf_1162761$t$tx].[txid] as [tx].[txid]), WHERE:([scale].[zumero].[dbf_1162761$z$dd$1257927703].[txid] as [dd].[txid]>(0)) ORDERED FORWARD)
|--Nested Loops(Inner Join, WHERE:([scale].[zumero].[dbf_1162761$z$rv$1257927703].[txid] as [rv].[txid]=[scale].[zumero].[dbf_1162761$t$tx].[txid] as [tx].[txid]))
|--Clustered Index Scan(OBJECT:([scale].[zumero].[dbf_1162761$z$rv$1257927703].[PK__dbf_1162__97770A2F62EEAE79] AS [rv]), WHERE:([scale].[zumero].[dbf_1162761$z$rv$1257927703].[txid] as [rv].[txid]>(0)))
|--Index Seek(OBJECT:([scale].[zumero].[dbf_1162761$t$tx].[gendex] AS [tx]), SEEK:([tx].[generation] >= (1500) AND [tx].[generation] <= (2502)) ORDERED FORWARD)

