نحوه شمارش ایندکس در SQL Server

نحوه شمارش ایندکس در SQL Server

نوشته شده توسط: تورج عزیزی
تاریخ انتشار: ۰۷ آذر ۱۳۹۴
آخرین بروزرسانی: 01 بهمن 1403
زمان مطالعه: 3 دقیقه
۰
(۰)

شمارش ایندکس در SQL Server، در این مقاله عملگرد SQL Server در اجرای کوئری پرکاربرد برای شمارش ردیف های یک پایگاه داده SQL Server توضیح داده می شود. 

SELECT COUNT (*) FROM mytable

شمارش ایندکس در SQL Server

یک سوال در مورد کوئری بالا می تواند این باشد که آیا SQL Server همیشه برای بدست آوردن تعداد رکوردها از table scan استفاده می کند یا خیر؟
جواب خیر است. Query Processor از ایندکس با حداقل تعداد page برای شمارش استفاده می کند تا I/O کمتری زده شود. اجازه دهید این موضوع را آزمایش کنیم. افراد علاقه‌مند می‌توانند با مطالعه مقاله پرکاربردترین دستورات SQL Server، دانش خود را در زمینه کوئری‌نویسی گسترش دهند.

CREATE TABLE CTest (c1 INT IDENTITY, c2 BIGINT DEFAULT 1, c3 CHAR (1000) DEFAULT ‘a’);
GO
SET NOCOUNT ON;
GO
INSERT INTO CTest DEFAULT VALUES;
GO 10000

قبل از اجراین کوئری دکمه Include Actual Query Plan را غیرفعال کنید. در غیر اینصورت ۱۰۰۰۰ پلن گرافیکی در نرم افزار SSMS تولید می شود و پیام زیر صادر می شود:

The query has exceeded the maximum number of result sets that can be displayed in the Execution Plan pane. Only the first 250 result sets are displayed in the Execution Plan pane.

حالا اگر SELECT COUNT(*) بگیریم، پلن حاصل به این شکل خواهد بود. Query Processor راهی جز انتخاب Table Scan ندارد. حالا من یک ایندکس Nonclustered اضافه می کنم که دارای page های کمتری نسبت به خود جدول است:

CREATE NONCLUSTERED INDEX CTest_1 ON CTest (c2);
GO

مشاهده کامل‌ترین و بروزترین آموزش sql server در نیک آموز


پلن SELECT به شکل زیر است:

توجه کنید که عملگر table scan به Index Scan روی ایندکس CTest_1 تغییر کرده است. به دلیل اینکه ایندکس دارای Page های کمتری نسبت به جدول است و بنابراین هزینه I/O کمتر است. پیشنهاد میکنیم برای درک بهتر مفاهیم کوئری نویسی را مطالعه کنید. حالا من یک ایندکس ایجا می کنم که از ایندکس CTest_1 هم کوچکتر است، یعنی روی ستونی با دیتاتایپ integer:

CREATE NONCLUSTERED INDEX CTest_2 ON CTest (c1);
GO

و دوباره پلن به پلن با ایندکس کوچکتر تغییر می کند:

همانطوری که انتظارش را داشتم دوباره تغییر کرد. حالا اجازه دهید به تعداد page های هر ایندکس نگاهی بیندازیم:

SELECT [index_id], [page_count]
FROM sys.dm_db_index_physical_stats (DB_ID (), OBJECT_ID (‘CTest’), NULL, NULL, ‘LIMITED’);
GO

index_id page_count
———– ——————–
۰ ۱۴۳۶
۲ ۲۸
۳ ۱۹

سخن پایانی

شمارش ایندکس در SQL Server، هر باری که Query Processor اقدام به انتخاب یک ایندکس می کند یکی از عواملی که در انتخابش دخیل است هزینه I/O است. به یاد داشته باشید که کوچکرین ایندکس برای این منظور ایجاد ایندکس Nonclustered روی ستونی است که روی آن ایندکس Clustered ایجاد شده و البته موارد کارایی آن هم به مراتب کمتر از سایر ایندکس ها خواهد بود. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم.

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
دانلود مقاله
نحوه شمارش ایندکس در SQL Server
فرمت PDF
12 صفحه
حجم 11 مگابایت
دانلود مقاله
title sign
معرفی نویسنده
تورج عزیزی
مقالات
18 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تورج عزیزی
title sign
دیدگاه کاربران

دانلود رایگان: آموزش SQL Server

هر روز یک ویدئو آموزشی رایگان برای شما ایمیل خواهد شد!

پاپ آپ | SQL Server

  • این قسمت برای اهداف اعتبارسنجی است و باید بدون تغییر باقی بماند.