আমি এমন পরিস্থিতিতে আছি যেখানে আমি 6 টি কলামের ন্যূনতম মান পেতে চাই।
এটি সম্পাদন করার জন্য আমি এখনও তিনটি উপায় পেয়েছি, তবে এই পদ্ধতির পারফরম্যান্স নিয়ে আমার উদ্বেগ রয়েছে এবং এটি জানতে চাই যে পারফরম্যান্সের জন্য আরও ভাল be
প্রথম পদ্ধতিটি হ'ল বড় কেস স্টেটমেন্ট ব্যবহার করা । উপরের লিঙ্কটিতে উদাহরণের ভিত্তিতে 3 টি কলাম সহ এখানে একটি উদাহরণ রয়েছে। আমার কেস স্টেটমেন্টটি অনেক দীর্ঘ হতে পারে যেহেতু আমি 6 টি কলাম দেখছি।
Select Id,
Case When Col1 <= Col2 And Col1 <= Col3 Then Col1
When Col2 <= Col3 Then Col2
Else Col3
End As TheMin
From MyTable
দ্বিতীয় বিকল্পটি হ'ল UNION
একাধিক সিলেক্ট স্টেটমেন্ট সহ অপারেটরটি ব্যবহার করা । আমি এটি এমন কোনও ইউডিএফের মধ্যে রাখব যা কোনও আইডি প্যারামিটার গ্রহণ করে।
select Id, dbo.GetMinimumFromMyTable(Id)
from MyTable
এবং
select min(col)
from
(
select col1 [col] from MyTable where Id = @id
union all
select col2 from MyTable where Id = @id
union all
select col3 from MyTable where Id = @id
) as t
এবং তৃতীয় বিকল্পটি আমি খুঁজে পেয়েছি হ'ল ইউএনপিআইভিটি অপারেটরটি ব্যবহার করা , যা আমি এখনও অবধি জানতাম না
with cte (ID, Col1, Col2, Col3)
as
(
select ID, Col1, Col2, Col3
from TestTable
)
select cte.ID, Col1, Col2, Col3, TheMin from cte
join
(
select
ID, min(Amount) as TheMin
from
cte
UNPIVOT (Amount for AmountCol in (Col1, Col2, Col3)) as unpvt
group by ID
) as minValues
on cte.ID = minValues.ID
টেবিলের আকার এবং ফ্রিকোয়েন্সি যার কারণে এই টেবিলটি অনুসন্ধান করা এবং আপডেট করা হয়েছে, এই প্রশ্নাগুলি ডেটাবেজে যে প্রভাব ফেলবে তা নিয়ে আমি উদ্বিগ্ন।
এই কোয়েরিটি কয়েক মিলিয়ন রেকর্ড সহ একটি টেবিলের সাথে যুক্ত হওয়ার জন্য ব্যবহৃত হবে, তবে যে রেকর্ডগুলি দেওয়া হয়েছিল তা একবারে কমিয়ে প্রায় একশ রেকর্ড হয়ে যাবে। এটি সারা দিন অনেকবার চলবে এবং আমি যে 6 টি কলাম জিজ্ঞাসা করছি তা প্রায়শই আপডেট হয় (সেগুলিতে প্রতিদিনের পরিসংখ্যান রয়েছে)। আমি মনে করি না যে আমি জিজ্ঞাসা করছি 6 টি কলামে কোনও সূচক রয়েছে।
সর্বনিম্ন একাধিক কলাম পাওয়ার চেষ্টা করার সময় এই পদ্ধতিগুলির মধ্যে কোনটি কার্যকারণের জন্য ভাল? বা এর চেয়ে আরও ভাল কোন পদ্ধতি আছে যা আমি জানি না?
আমি এসকিউএল সার্ভার 2005 ব্যবহার করছি
নমুনা ডেটা ও ফলাফল
যদি আমার ডেটাতে এই জাতীয় রেকর্ড থাকে:
আইডি কল 1 কল 2 কল 3 কল 4 কল 5 কল 6 1 3 4 0 2 1 5 2 2 6 10 5 7 9 3 1 1 2 3 4 5 4 9 5 4 6 8 9
শেষ ফলাফল হওয়া উচিত
আইডির মান 1 0 2 2 3 1 4 4
Year1
ফলাফল হিসাবে ফিরে আসবে , যা অগত্যা সঠিক হতে পারে না।