কোনও টেবিলের কলামগুলির যৌক্তিক ক্রমগুলি কী স্টোরেজ স্তরে তাদের শারীরিক অর্ডারে কোনও প্রভাব ফেলে? হ্যাঁ।
এটি গুরুত্বপূর্ণ বা না তা একটি আলাদা সমস্যা যা আমি উত্তর দিতে পারি না (এখনও)।
একটি রেকর্ডের শারীরবৃত্তির বিষয়ে পল র্যান্ডাল থেকে ঘন ঘন সংযুক্ত নিবন্ধে বর্ণিত অনুরূপভাবে , আসুন আমরা ডিবিসিসি আইএনডি সহ একটি সাধারণ দুটি কলামের টেবিলটি দেখি:
SET STATISTICS IO OFF;
SET STATISTICS TIME OFF;
USE master;
GO
IF DATABASEPROPERTY (N'RowStructure', 'Version') > 0 DROP DATABASE RowStructure;
GO
CREATE DATABASE RowStructure;
GO
USE RowStructure;
GO
CREATE TABLE FixedLengthOrder
(
c1 INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
, c2 CHAR(10) DEFAULT REPLICATE('A', 10) NOT NULL
, c3 CHAR(10) DEFAULT REPLICATE('B', 10) NOT NULL
);
GO
INSERT FixedLengthOrder DEFAULT VALUES;
GO
DBCC IND ('RowStructure', 'FixedLengthOrder', 1);
GO
উপরের আউটপুটটি দেখায় যে আমাদের 89 পৃষ্ঠাটি দেখতে হবে:
DBCC TRACEON (3604);
GO
DBCC PAGE ('RowStructure', 1, 89, 3);
GO
ডিবিসিসি পৃষ্ঠা থেকে আউটপুটে আমরা দেখতে পাই যে সি 2 এর 'বি' এর আগে 'এ' অক্ষরটি দিয়ে সি 1 টি স্টাফ করা হয়েছিল:
Memory Dump @0x000000000D25A060
0000000000000000: 10001c00 01000000 41414141 41414141 †........AAAAAAAA
0000000000000010: 41414242 42424242 42424242 030000††††AABBBBBBBBBB...
এবং ঠিক এই কারণেই, RowStructure.mdf
একটি হেক্স সম্পাদক সম্পাদকের সাথে আবক্ষ্ণতা খুলুন এবং 'এ' স্ট্রিংটি 'বি' স্ট্রিংয়ের আগে নিশ্চিত করুন:
এখন পরীক্ষার পুনরাবৃত্তি করুন তবে স্ট্রিংয়ের ক্রমটি বিপরীত করুন, সি -1 এ 'বি' অক্ষর এবং সি 2-এ 'ক' অক্ষর রেখে:
CREATE TABLE FixedLengthOrder
(
c1 INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
, c2 CHAR(10) DEFAULT REPLICATE('B', 10) NOT NULL
, c3 CHAR(10) DEFAULT REPLICATE('A', 10) NOT NULL
);
GO
এবার আমাদের ডিবিসিসি PAGE আউটপুটটি আলাদা এবং 'বি' স্ট্রিংটি প্রথম প্রদর্শিত হবে:
Memory Dump @0x000000000FC2A060
0000000000000000: 10001c00 01000000 42424242 42424242 †........BBBBBBBB
0000000000000010: 42424141 41414141 41414141 030000††††BBAAAAAAAAAA...
আবার, কেবল গিগলসের জন্য, ডেটা ফাইলের হেক্স ডাম্প পরীক্ষা করতে দিন:
অ্যানাটমি অফ আ রেকর্ড ব্যাখ্যা করার সাথে সাথে একটি রেকর্ডের স্থির ও পরিবর্তনশীল দৈর্ঘ্যের কলামগুলি পৃথক ব্লকগুলিতে সংরক্ষণ করা হয়। যৌক্তিকভাবে ইন্টারলিভিং স্থির এবং পরিবর্তনশীল কলামের ধরণের দৈহিক রেকর্ডটিতে কোনও প্রভাব নেই। যাইহোক, প্রতিটি ব্লকের মধ্যে আপনার কলামগুলির ক্রম ডেটা ফাইলের বাইটের ক্রম মানচিত্র করে।
CREATE TABLE FixedAndVariableColumns
(
c1 INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
, c2 CHAR(10) DEFAULT REPLICATE('A', 10) NOT NULL
, c3 VARCHAR(10) DEFAULT REPLICATE('B', 10) NOT NULL
, c4 CHAR(10) DEFAULT REPLICATE('C', 10) NOT NULL
, c5 VARCHAR(10) DEFAULT REPLICATE('D', 10) NOT NULL
, c6 CHAR(10) DEFAULT REPLICATE('E', 10) NOT NULL
);
GO
Memory Dump @0x000000000E07C060
0000000000000000: 30002600 01000000 41414141 41414141 †0.&.....AAAAAAAA
0000000000000010: 41414343 43434343 43434343 45454545 †AACCCCCCCCCCEEEE
0000000000000020: 45454545 45450600 00020039 00430042 †EEEEEE.....9.C.B
0000000000000030: 42424242 42424242 42444444 44444444 †BBBBBBBBBDDDDDDD
0000000000000040: 444444†††††††††††††††††††††††††††††††DDD
আরো দেখুন:
কলামের অর্ডার কিছু যায় আসে না ... সাধারণত, তবে - এটি নির্ভর করে!
CREATE TABLE
বিবৃতি অনুসারে হয় (বাদে সিআই কী কলামগুলি বিভাগে প্রথম আসে)।ALTER COLUMN
ডেটাটাইপস / কলাম দৈর্ঘ্যের পরিবর্তন হলে কলামগুলির ক্রম পরিবর্তন হতে পারে। কেবলমাত্র ছোটখাটো ক্ষেত্রে যেখানে আমি এটি ভাবতে পারি তা হ'ল খালি স্ট্রিং বা NULL সহ পরিবর্তনশীল দৈর্ঘ্যের বিভাগের শেষে থাকা কলামগুলি কলাম অফসেট অ্যারেতে কোনও স্থান নেয় না (২০০৮ এর ইন্টার্নাল বইয়ে ক্যালেন ডেলানির দ্বারা প্রদর্শিত)