مثالهای عملی
مثال 1: ساخت پایه روی ستون پرتکرار با CREATE XML INDEX
یک مسیر دسترسی اولیه برای جستوجوی پرتکرار ساخته میشود و سپس متادیتای آن کنترل میگردد. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE1', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE1;
CREATE TABLE dbo.DemoXmlIndexE1
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE1 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE1(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE1
ON dbo.DemoXmlIndexE1(Payload);
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE1');
SELECT DocumentID
FROM dbo.DemoXmlIndexE1
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E1 | PRIMARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: این الگو نقطه شروع است؛ در سامانه واقعی باید انتخاب ستون با Execution Plan و آمار مصرف تأیید شود. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 2: کلید مرکب برای جستوجوی چندشرطی با CREATE XML INDEX
دو ستون با ترتیب هدفمند در تعریف ایندکس قرار میگیرند تا شرطهای ترکیبی و مرتبسازی رایج پوشش داده شوند. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE2', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE2;
CREATE TABLE dbo.DemoXmlIndexE2
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE2 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE2(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE2
ON dbo.DemoXmlIndexE2(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E2
ON dbo.DemoXmlIndexE2(Payload)
USING XML INDEX PXML_DemoXmlIndexE2 FOR PATH;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE2');
SELECT DocumentID
FROM dbo.DemoXmlIndexE2
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E2 | PATH SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: ستون سمت چپ کلید نقش تعیینکننده دارد و تغییر ترتیب ستونها میتواند شکل Seek را عوض کند. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 3: پشتیبانی از مرتبسازی نزولی با CREATE XML INDEX
تعریف ایندکس با ترتیب نزولی برای گزارشهایی بررسی میشود که تازهترین دادهها را در ابتدای نتیجه میخواهند. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE3', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE3;
CREATE TABLE dbo.DemoXmlIndexE3
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE3 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE3(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE3
ON dbo.DemoXmlIndexE3(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E3
ON dbo.DemoXmlIndexE3(Payload)
USING XML INDEX PXML_DemoXmlIndexE3 FOR VALUE;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE3');
SELECT DocumentID
FROM dbo.DemoXmlIndexE3
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E3 | VALUE SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: جهت کلید زمانی مهمتر میشود که Query ترکیبی از چند ستون با جهتهای متفاوت داشته باشد. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 4: استفاده در شرط و اتصال جدولها با CREATE XML INDEX
نمونهای نزدیک به گزارش عملی ساخته میشود تا نقش ایندکس در Predicate و Join یا بازیابی ردیفهای هدف دیده شود. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE4', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE4;
CREATE TABLE dbo.DemoXmlIndexE4
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE4 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE4(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE4
ON dbo.DemoXmlIndexE4(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E4
ON dbo.DemoXmlIndexE4(Payload)
USING XML INDEX PXML_DemoXmlIndexE4 FOR PROPERTY;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE4');
SELECT DocumentID
FROM dbo.DemoXmlIndexE4
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E4 | PROPERTY SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: وجود ایندکس تضمین استفاده از آن نیست؛ Optimizer بر پایه آمار، تعداد ردیف و هزینه تخمینی تصمیم میگیرد. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 5: تنظیم گزینههای ساخت و نگهداری با CREATE XML INDEX
یکی از گزینههای متداول ساخت ایندکس مانند FILLFACTOR، SORT_IN_TEMPDB یا فشردهسازی در یک سناریوی کنترلشده نمایش داده میشود. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE5', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE5;
CREATE TABLE dbo.DemoXmlIndexE5
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE5 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE5(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE5
ON dbo.DemoXmlIndexE5(Payload);
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE5');
SELECT DocumentID
FROM dbo.DemoXmlIndexE5
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E5 | PRIMARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: هر گزینه هزینه و پیشنیاز خود را دارد؛ مقدار مناسب باید با نسخه SQL Server، Edition و الگوی بار واقعی آزموده شود. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 6: رفتار با NULL و دادههای اختیاری با CREATE XML INDEX
دادهای دارای مقدار NULL وارد میشود تا اثر آن بر تعریف، انتخابپذیری و نتیجه Query روشن شود. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE6', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE6;
CREATE TABLE dbo.DemoXmlIndexE6
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE6 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE6(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE6
ON dbo.DemoXmlIndexE6(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E6
ON dbo.DemoXmlIndexE6(Payload)
USING XML INDEX PXML_DemoXmlIndexE6 FOR PATH;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE6');
SELECT DocumentID
FROM dbo.DemoXmlIndexE6
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E6 | PATH SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: NULL مقدار عادی نیست و قواعد یکتایی، فیلتر و برآورد Cardinality را باید آگاهانه بررسی کرد. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 7: سناریوی مرزی با دامنه تاریخی با CREATE XML INDEX
یک بازه تاریخی و حجم منطقی داده برای نشاندادن اثر ترتیب کلید، فیلتر یا Segment Elimination به کار میرود. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE7', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE7;
CREATE TABLE dbo.DemoXmlIndexE7
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE7 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE7(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE7
ON dbo.DemoXmlIndexE7(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E7
ON dbo.DemoXmlIndexE7(Payload)
USING XML INDEX PXML_DemoXmlIndexE7 FOR VALUE;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE7');
SELECT DocumentID
FROM dbo.DemoXmlIndexE7
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E7 | VALUE SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: در بازههای بسیار بزرگ، بهروز بودن Statistics و هماهنگی نوع پارامتر با نوع ستون اهمیت ویژه دارد. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 8: گزارش سازمانی و ستونهای خروجی با CREATE XML INDEX
نمونه گزارش فروش یا عملیات با چند ستون خروجی ارائه میشود تا مرز میان کلید جستوجو و داده موردنیاز نمایش مشخص شود. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE8', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE8;
CREATE TABLE dbo.DemoXmlIndexE8
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE8 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE8(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE8
ON dbo.DemoXmlIndexE8(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E8
ON dbo.DemoXmlIndexE8(Payload)
USING XML INDEX PXML_DemoXmlIndexE8 FOR PROPERTY;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE8');
SELECT DocumentID
FROM dbo.DemoXmlIndexE8
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E8 | PROPERTY SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: هدف کاهش خواندن صفحه و حذف عملیات اضافه است، نه افزودن همه ستونهای جدول به هر ایندکس. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 9: روش اشتباه و نسخه اصلاحشده با CREATE XML INDEX
یک خطای طراحی رایج ابتدا در Comment توضیح داده میشود و سپس تعریف اصلاحشده و قابل اجرا قرار میگیرد. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE9', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE9;
CREATE TABLE dbo.DemoXmlIndexE9
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE9 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE9(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE9
ON dbo.DemoXmlIndexE9(Payload);
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE9');
SELECT DocumentID
FROM dbo.DemoXmlIndexE9
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E9 | PRIMARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: بازبینی نام، نوع داده، ترتیب ستون و قابلیتهای مجاز پیش از اجرای DDL از خطا و Downtime جلوگیری میکند. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
مثال 10: کنترل نتیجه و سنجش کارایی با CREATE XML INDEX
پس از ساخت، نمای سیستمی و یک Query نمونه برای کنترل نوع ایندکس و آمادهسازی ارزیابی کارایی استفاده میشوند. در این مثال، هدف عملی ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query است.
IF OBJECT_ID(N'dbo.DemoXmlIndexE10', N'U') IS NOT NULL
DROP TABLE dbo.DemoXmlIndexE10;
CREATE TABLE dbo.DemoXmlIndexE10
(
DocumentID int NOT NULL,
Payload xml NOT NULL,
CONSTRAINT PK_DemoXmlIndexE10 PRIMARY KEY CLUSTERED (DocumentID)
);
INSERT INTO dbo.DemoXmlIndexE10(DocumentID, Payload)
VALUES
(1, N'<order id="1001"><customer>Ali</customer><amount>125000</amount></order>'),
(2, N'<order id="1002"><customer>Sara</customer><amount>84000</amount></order>');
CREATE PRIMARY XML INDEX PXML_DemoXmlIndexE10
ON dbo.DemoXmlIndexE10(Payload);
CREATE XML INDEX IX_DemoXmlIndex_E10
ON dbo.DemoXmlIndexE10(Payload)
USING XML INDEX PXML_DemoXmlIndexE10 FOR PATH;
SELECT name, secondary_type_desc
FROM sys.xml_indexes
WHERE object_id = OBJECT_ID(N'dbo.DemoXmlIndexE10');
SELECT DocumentID
FROM dbo.DemoXmlIndexE10
WHERE Payload.exist('/order[@id="1001"]') = 1;
| نام یا شاخص کنترل | نوع مورد انتظار | نتیجه نمونه |
|---|
| IX_DemoXmlIndex_E10 | PATH SECONDARY XML | تعریف در نمای سیستمی قابل مشاهده است و Query کنترل بدون خطای ساختاری اجرا میشود. |
نکته کاربردی: نتیجه نهایی باید با Actual Execution Plan، STATISTICS IO و زمان اجرا در محیط آزمایشی مقایسه شود. برای ساخت ایندکس XML همچنین باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی را در بازبینی نهایی ثبت کرد.
سؤالات متداول
سؤال 1: CREATE XML INDEX دقیقاً چه کاری انجام میدهد؟
CREATE XML INDEX ساختاری ایجاد میکند که برای ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query طراحی شده است. موتور SQL Server با توجه به Predicate، آمار و هزینه تخمینی تصمیم میگیرد از آن استفاده کند؛ بنابراین ایجاد ساختار بهتنهایی تضمینکننده سریعترشدن همه Queryها نیست.
سؤال 2: چه زمانی ساخت ایندکس XML انتخاب مناسبی است؟
وقتی الگوی واقعی بار کاری با هدف این ساختار هماهنگ باشد، ساخت ایندکس XML انتخاب قابل دفاعی است. ابتدا Queryهای پرهزینه، تعداد اجرای آنها، حجم خواندن منطقی و مسیر رشد داده را بررسی کنید و سپس تغییر را در محیط آزمایشی بسنجید.
سؤال 3: آیا افزودن این ایندکس هزینه پروژه را کاهش میدهد؟
اگر گلوگاه درست تشخیص داده شده باشد، کاهش زمان پاسخ، مصرف CPU و تعداد خواندن میتواند هزینه زیرساخت و پشتیبانی را کم کند. در پروژه حرفهای باید هزینه ساخت، فضای دیسک، Log و نگهداری DML نیز در محاسبه بازگشت سرمایه وارد شود.
سؤال 4: برای سفارش طراحی ساخت ایندکس XML چه اطلاعاتی لازم است؟
طرح جدول، Queryهای واقعی، Actual Execution Plan، حجم و رشد داده، نسخه SQL Server، پنجره نگهداری و شاخصهای SLA اطلاعات پایه هستند. بدون این دادهها پیشنهاد ایندکس بیشتر شبیه حدس است تا یک تصمیم مهندسی قابل اندازهگیری.
سؤال 5: تفاوت این روش با یک ایندکس عمومی چیست؟
تفاوت اصلی در هدف ذخیرهسازی و مسیر دسترسی است. CREATE XML INDEX بر ایجاد نمایش پایدار از ساختار XML برای شتابدادن به متدهای exist، value، nodes و query تمرکز دارد، در حالی که یک تعریف عمومی ممکن است فقط یک ستون را بدون توجه به پوشش Query، توزیع داده و هزینه تغییرات ایندکس کند.
سؤال 6: آیا میتوان پیادهسازی را بدون توقف سرویس انجام داد؟
این موضوع به نوع ایندکس، نسخه و Edition، اندازه جدول، گزینه ONLINE و الگوی تراکنش بستگی دارد. حتی عملیات Online نیز میتواند قفلهای کوتاه یا مصرف منابع قابل توجه داشته باشد؛ بنابراین زمانبندی، پایش و برنامه بازگشت ضروری است.
سؤال 7: رایجترین خطا هنگام اجرای CREATE XML INDEX چیست؟
خطاهای رایج شامل نام یا ستون اشتباه، داده ناسازگار، نبود پیشنیاز، تعریف تکراری و گزینه پشتیبانینشده است. برای این موضوع بهطور خاص باید وجود کلید خوشهای روی جدول، انتخاب Primary یا Secondary XML Index و هزینه فضای ذخیرهسازی نیز پیش از اجرای نهایی کنترل شود.
سؤال 8: اثر ساخت ایندکس XML بر Performance چگونه سنجیده میشود؟
مقایسه باید با Query و پارامتر یکسان، Cache کنترلشده، Actual Execution Plan، SET STATISTICS IO و SET STATISTICS TIME انجام شود. فقط زمان یک اجرای منفرد معیار کافی نیست؛ خواندن منطقی، Memory Grant، Spill و اثر همزمانی را هم ثبت کنید.
سؤال 9: بهترین روش نگهداری این ایندکس چیست؟
بر اساس نرخ تغییر، Fragmentation یا کیفیت Rowgroup، آمار مصرف و فضای ذخیرهسازی برنامه نگهداری بسازید. بازسازی زمانبندیشده و کورکورانه مناسب نیست؛ تصمیم نگهداری باید مبتنی بر اندازه، Page Count، نوع ساختار و اثر واقعی بر Query باشد.
سؤال 10: این دستور با کدام نسخههای SQL Server سازگار است؟
هسته دستور در نسخههای پشتیبان آن قابل استفاده است، اما گزینهها و قابلیتهای تکمیلی میان نسخهها، Editionها و سرویسهای ابری تفاوت دارند. پیش از استفاده از ONLINE، فشردهسازی، Columnstore پیشرفته یا گزینههای خاص، مستندات همان نسخه سرور را کنترل کنید.