আপনাকে আপনার সন্দেহের একটি সংক্ষিপ্ত উত্তর দেওয়ার চেষ্টা করা হচ্ছে, যদি আপনি skip(n).take(m)
লিনাকের পদ্ধতিগুলি কার্যকর করেন (এসকিউএল 2005/2008 সাথে ডাটাবেস সার্ভার হিসাবে) আপনার ক্যোয়ারীটি Select ROW_NUMBER() Over ...
বিবৃতিটি ব্যবহার করবে , এতে এসকিউএল ইঞ্জিনে কোনওভাবে সরাসরি পেজিং রয়েছে।
আপনাকে একটি উদাহরণ দেওয়ার জন্য, আমার কাছে একটি ডিবি টেবিল কল রয়েছে mtcity
এবং আমি নিম্নলিখিত কোয়েরিটি লিখেছি (সত্তা থেকে লিনক সহ কাজ করুন):
using (DataClasses1DataContext c = new DataClasses1DataContext())
{
var query = (from MtCity2 c1 in c.MtCity2s
select c1).Skip(3).Take(3);
//Doing something with the query.
}
ফলাফলের ক্যোয়ারীটি হ'ল:
SELECT [t1].[CodCity],
[t1].[CodCountry],
[t1].[CodRegion],
[t1].[Name],
[t1].[Code]
FROM (
SELECT ROW_NUMBER() OVER (
ORDER BY [t0].[CodCity],
[t0].[CodCountry],
[t0].[CodRegion],
[t0].[Name],
[t0].[Code]) AS [ROW_NUMBER],
[t0].[CodCity],
[t0].[CodCountry],
[t0].[CodRegion],
[t0].[Name],
[t0].[Code]
FROM [dbo].[MtCity] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
যা একটি উইন্ডোড ডেটা অ্যাক্সেস (বেশ শীতল, বিটিডাব্লু কিউজ খুব ভিক্ষা শুরু হওয়ার পর থেকে ডেটা ফিরিয়ে দেবে এবং শর্তগুলি মেটানো পর্যন্ত টেবিলে অ্যাক্সেস করবে)। এটির সাথে খুব মিল থাকবে:
With CityEntities As
(
Select ROW_NUMBER() Over (Order By CodCity) As Row,
CodCity //here is only accessed by the Index as CodCity is the primary
From dbo.mtcity
)
Select [t0].[CodCity],
[t0].[CodCountry],
[t0].[CodRegion],
[t0].[Name],
[t0].[Code]
From CityEntities c
Inner Join dbo.MtCity t0 on c.CodCity = t0.CodCity
Where c.Row Between @p0 + 1 AND @p0 + @p1
Order By c.Row Asc
ব্যতিক্রম ছাড়া, এই দ্বিতীয় ক্যোয়ারী লিনাক ফলাফলের চেয়ে দ্রুত কার্যকর করা হবে কারণ এটি ডেটা অ্যাক্সেস উইন্ডো তৈরি করতে একচেটিয়াভাবে সূচক ব্যবহার করবে; এর অর্থ, যদি আপনার কিছু ফিল্টারিংয়ের প্রয়োজন হয় তবে ফিল্টারিংটি সত্তা তালিকাতে (বা হওয়া আবশ্যক) হওয়া উচিত (যেখানে সারিটি তৈরি করা হয়) এবং ভাল সম্পাদন চালিয়ে যাওয়ার জন্য কিছু সূচি তৈরি করা উচিত।
এখন আর কি ভাল?
আপনার যুক্তিতে যদি যথেষ্ট শক্ত ওয়ারফ্লো থাকে তবে সঠিক এসকিউএল উপায় কার্যকর করা জটিল হবে। সেক্ষেত্রে লিনকিউই এর সমাধান হবে।
আপনি যদি লজিকের সেই অংশটি সরাসরি এসকিউএলে (সঞ্চিত পদ্ধতিতে) কম করতে পারেন তবে এটি আরও ভাল হবে কারণ আপনি যে দ্বিতীয় কোয়েরিটি আপনাকে দেখিয়েছেন তা প্রয়োগ করতে পারবেন (সূচকগুলি ব্যবহার করে) এবং এসকিউএলকে এক্সিকিউশন প্ল্যান উত্পন্ন এবং সঞ্চয় করতে পারবেন ক্যোয়ারী (কর্মক্ষমতা উন্নত))