আমার -4০-৪৩33 পরীক্ষার বইটি পড়ার সময় আমি এমন কিছু নিয়ে ভাবছিলাম যা আমি কাজ করতে দেখছি না, তবুও আমি বিশ্বাস করি এটি তা করে। প্যাসেজ কিছু পড়তে:
কলামটি অবশ্যই PERSIDED হিসাবে চিহ্নিত করা আবশ্যক , যার অর্থ এসকিউএল সার্ভার শারীরিকভাবে গণনা করা কলামের অভিব্যক্তিটির ফলাফলটি যখনই কোনও প্রশ্নের সাথে উল্লেখ করা হয়েছে ততবার তা গণনার পরিবর্তে ডেটা সারিটিতে সঞ্চয় করে।
এ থেকে আমি দুটি জিনিস বুঝতে পারি:
- একটি অ-স্থিত গণিত কলামটি প্রতি বার গণনা করা হয় যে এটি কোনও প্রশ্নের সাথে উল্লেখ করা হয়েছে
- গণিত কলামের জন্য কিছুই সংরক্ষণ করা হয়নি বলে, আমি ধরে নিই কলামের জন্য কোনও সূচক তৈরি করা যাবে না।
এটি পড়ার পরে, আমি ভেবেছিলাম যে এটি কিছুটা অদ্ভুত ছিল কারণ আমি পূর্ববর্তী প্রকল্পের অ-স্থায়ী কলামে একটি সূচক তৈরি করতে সক্ষম হয়েছি।
স্থিতিশীল নয় এমন কিছুর জন্য কীভাবে একটি সূচক তৈরি করা যেতে পারে এবং এটি কি দীর্ঘমেয়াদে ক্ষতিকারক?
এটি প্রমাণ করতে আমি নিম্নলিখিত এসকিউএল স্টেটমেন্টটি চালিয়েছি:
CREATE TABLE testTable
(
ID INT IDENTITY(1,1) PRIMARY KEY,
telephone VARCHAR(14),
c_areaCode AS (SUBSTRING(telephone,0,5)),
cp_areaCode AS (SUBSTRING(telephone,0,5)) PERSISTED
)
INSERT INTO testTable VALUES('09823 000000');
INSERT INTO testTable VALUES('09824 000000');
INSERT INTO testTable VALUES('09825 000000');
CREATE NONCLUSTERED INDEX IX_NotPersisted ON testTable(c_areaCode);
CREATE NONCLUSTERED INDEX IX_Persisted ON testTable(cp_areaCode);
এবং তারপরে নিম্নলিখিত কোয়েরিগুলি চালান:
DBCC FREEPROCCACHE
DBCC FREESYSTEMCACHE('ALL');
DBCC DROPCLEANBUFFERS
GO
SELECT cp_areaCode FROM testTable;
GO
SELECT c_areaCode FROM testTable;
উপরের কোডটির জন্য ক্যোয়ারী পরিকল্পনার দিকে নজর রেখে আমি দেখতে পাচ্ছি যে দুটি নির্বাচিত অনুসন্ধানগুলি অ-স্থির সূচকটি ব্যবহার করছে। আবার, কীভাবে?