আপনার পোস্ট করা ক্যোয়ারিতে:
select * from <table_name>;
100 ম -200 ম সারিগুলির মতো কোনও জিনিস নেই, কারণ আপনি কোনও অর্ডার দ্বারা নির্দিষ্ট করেন না। আপনি যদি পুরো অনেক আকর্ষণীয় কারণে অর্ডারটি অন্তর্ভুক্ত না করেন তবে অর্ডারের গ্যারান্টিযুক্ত নয় তবে এটি এখানে মূল বিষয় নয়।
সুতরাং আপনার পয়েন্টটি চিত্রিত করতে, আসুন একটি টেবিল ব্যবহার করুন - আমি স্ট্যাক ওভারফ্লো ডেটা ডাম্প থেকে ব্যবহারকারীদের সারণিটি ব্যবহার করব , এবং এই ক্যোয়ারীটি চালাব:
SELECT * FROM dbo.Users ORDER BY DisplayName;
ডিফল্টরূপে, ডিসপ্লেনাম ফিল্ডে কোনও সূচক নেই, সুতরাং এসকিউএল সার্ভারকে পুরো টেবিলটি স্ক্যান করতে হবে, তারপরে এটিকে প্রদর্শন নাম অনুসারে বাছাই করতে হবে। এখানে কার্যকর করার পরিকল্পনা রয়েছে :
এটি সুন্দর নয় - এটি প্রায় 30k এর আনুমানিক সাবট্রি ব্যয়ের সাথে অনেক কাজ। (আপনি এটি প্যাসেটিপ্ল্যানের সিলেক্ট অপারেটরের উপর দিয়ে আপনার মাউসটিকে ঘুরিয়ে দিয়ে দেখতে পাচ্ছেন)) তাহলে আমরা কেবল 100-200 সারি চাইলে কী হয়? আমরা এই সিনট্যাক্সটি এসকিউএল সার্ভার ২০১২+ তে ব্যবহার করতে পারি:
SELECT * FROM dbo.Users ORDER BY DisplayName OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;
এটি কার্যকর করার পরিকল্পনাটিও বেশ কুৎসিত:
এসকিউএল সার্ভারটি এখনও সজ্জিত তালিকাটি তৈরি করতে পুরো টেবিলটি স্ক্যান করছে কেবল আপনাকে আপনার সারিগুলি 100-200 দেওয়ার জন্য, এবং ব্যয় এখনও 30k এর কাছাকাছি। আরও খারাপ, আপনার জিজ্ঞাসাটি চলার সময় এই পুরো তালিকাটি পুনর্নির্মাণ করা হবে (কারণ সর্বোপরি, কেউ তাদের ডিসপ্লে নাম পরিবর্তন করে থাকতে পারে))
এটি আরও দ্রুতগতিতে চালিত করতে, আমরা ডিসপ্লেনামে একটি অবিচ্ছিন্ন সূচক তৈরি করতে পারি, যা আমাদের সারণীর অনুলিপি, সেই নির্দিষ্ট ক্ষেত্রের দ্বারা সাজানো:
CREATE INDEX IX_DisplayName ON dbo.Users(DisplayName);
সেই সূচকটি সহ, আমাদের ক্যোয়ারির সম্পাদনের পরিকল্পনা এখন একটি সূচি চায়:
কোয়েরিটি তাত্ক্ষণিকভাবে শেষ হবে এবং আনুমানিক সাবট্রি ব্যয় রয়েছে মাত্র 0.66 (30 কে বিপরীতে)।
সংক্ষেপে, আপনি যদি এমন উপায়ে ডেটা সংগঠিত করেন যা আপনার প্রায়শই চালানো প্রশ্নগুলিকে সমর্থন করে তবে হ্যাঁ, এসকিউএল সার্ভার আপনার প্রশ্নগুলি আরও দ্রুত করতে শর্টকাট নিতে পারে। অন্যদিকে, যদি আপনার সমস্ত কিছু হিপস বা ক্লাস্টারড ইনডেক্স থাকে তবে আপনি খারাপ হয়ে যাবেন।