আমার একটি টেবিল রয়েছে, এতে CustPassMaster
16 টি কলাম রয়েছে, যার একটি হ'ল CustNum varchar(8)
এবং আমি একটি সূচক তৈরি করেছি IX_dbo_CustPassMaster_CustNum
। আমি যখন আমার SELECT
বিবৃতি চালাচ্ছি :
SELECT * FROM dbo.CustPassMaster WHERE CustNum = '12345678'
এটি সূচকটিকে সম্পূর্ণ উপেক্ষা করে। এটি আমাকে আরও বিভ্রান্ত করে তোলে কারণ আমার কাছে আরও টেবিল CustDataMaster
রয়েছে আরও কলাম (55) যার মধ্যে একটি CustNum varchar(8)
। আমি IX_dbo_CustDataMaster_CustNum
এই টেবিলের এই কলামে ( ) একটি সূচক তৈরি করেছি এবং ব্যবহারিকভাবে একই কোয়েরিটি ব্যবহার করব:
SELECT * FROM dbo.CustDataMaster WHERE CustNum = '12345678'
এবং এটি আমার তৈরি সূচকটি ব্যবহার করে।
এর পিছনে কি কোনও নির্দিষ্ট যুক্তি রয়েছে? কেন এটি সূচকটি ব্যবহার করবেCustDataMaster
, তবে একটিটি নয় CustPassMaster
? এটি কি কম কলামের সংখ্যার কারণে?
প্রথম ক্যোয়ারিতে 66 টি সারি দেওয়া হয়। দ্বিতীয়টির জন্য, 1 সারি ফিরে আসে।
এছাড়াও, অতিরিক্ত নোট: CustPassMaster
4991 রেকর্ডস রয়েছে, এবং CustDataMaster
এর 5376 রেকর্ড রয়েছে। সূচক উপেক্ষা করার পেছনে কি এই যুক্তি হতে পারে? CustPassMaster
এছাড়াও সদৃশ রেকর্ড একই আছেCustNum
মান রয়েছে। এটি কি অন্য ফ্যাক্টর?
আমি উভয় প্রশ্নের সত্যিকারের বাস্তবায়ন পরিকল্পনার ফলাফলের উপর এই দাবির ভিত্তি করছি।
এখানে ডিডিএল CustPassMaster
(অব্যবহৃত সূচকযুক্ত এক):
CREATE TABLE dbo.CustPassMaster(
[CustNum] [varchar](8) NOT NULL,
[Username] [char](15) NOT NULL,
[Password] [char](15) NOT NULL,
/* more columns here */
[VBTerminator] [varchar](1) NOT NULL
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_dbo_CustPassMaster_CustNum] ON dbo.CustPassMaster
(
[CustNum] ASC
) WITH (PAD_INDEX = OFF
, STATISTICS_NORECOMPUTE = OFF
, SORT_IN_TEMPDB = OFF
, DROP_EXISTING = OFF
, ONLINE = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
এবং এর জন্য ডিডিএল CustDataMaster
(আমি প্রচুর অপ্রাসঙ্গিক ক্ষেত্র বাদ দিয়েছি):
CREATE TABLE dbo.CustDataMaster(
[CustNum] [varchar](8) NOT NULL,
/* more columns here */
[VBTerminator] [varchar](1) NOT NULL
) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IX_dbo_CustDataMaster_CustNum] ON dbo.CustDataMaster
(
[CustNum] ASC
)WITH (PAD_INDEX = OFF
, STATISTICS_NORECOMPUTE = OFF
, SORT_IN_TEMPDB = OFF
, DROP_EXISTING = OFF
, ONLINE = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
আমার কাছে সেই টেবিলগুলির মধ্যে একটিতে একটি ক্লাস্টার ইনডেক্স নেই, কেবলমাত্র একটি অবিচ্ছিন্ন সূচক।
এই তথ্য উপেক্ষা করুন যে ডেটাটাইপগুলি পুরোপুরি ডেটা সংরক্ষণের সাথে মেলে না। এই ক্ষেত্রগুলি একটি আইবিএম এএস / 400 ডিবি 2 ডাটাবেস থেকে ব্যাকআপ এবং এটি এর জন্য সামঞ্জস্যপূর্ণ ডেটাটাইপগুলি। (আমাকে ঠিক একই প্রশ্নের সাথে এই ব্যাকআপ ডাটাবেসটি অনুসন্ধান করতে সক্ষম হতে হবে এবং সঠিক একই ফলাফল পেতে হবে ।)
এই তথ্যটি শুধুমাত্রSELECT
বিবৃতিগুলির জন্য ব্যবহৃত হয় । ব্যাকআপ অ্যাপ্লিকেশন যখন AS / 400 থেকে ডেটা অনুলিপি করছে তখন ব্যতীত আমি এতে কোনও INSERT
/ UPDATE
/ DELETE
বক্তব্য করি না ।