خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


استفاده از تابع ()APPROX_COUNT_DISTINCT در SQL Server

استفاده از تابع ()APPROX_COUNT_DISTINCT در SQL Server
تابع APPROX_COUNT_DISTINCT یکی از توابع جدید معرفی شده در SQL Server 2019 است. این تابع تعداد تقریبی مقادیر unique غیر Null را در یک گروه برمی گرداند.

نرم افزار سامانه مودیان راهکار
اساساً ، برای بدست آوردن حدود تقریبی تعداد ردیف های غیر تکراری در یک جدول بزرگ یا Result set را بدست آورید. این تابع مشابه توابع ()COUNT_BIG و COUNT البته همراه با DISTINCT، است. اما یک عدد تقریبی را به جای مقدار دقیق برمی گرداند. پس پر واضح است که تابع APPROX_COUNT_DISTINCT بیشتر مناسب Big data است. این تابع برای دسترسی به رکوردهای بسیار زیاد با بیش از یک میلیون ردیف و aggregation ستون یا ستون هایی که مقادیر distinct زیادی دارند، طراحی شده است. Syntax استفاده از این تابع به فرم زیر می باشد:



APPROX_COUNT_DISTINCT ( expression )

Expression می تواند از هر نوع دیتاتایپی به غیر از ntext، text، sql_variant، image باشد.

COUNT() vs APPROX_COUNT_DISTINCT

در مثال زیر، تابع COUNT با APPROX_COUNT_DISTINCT به نوعی مقایسه شده است:

USE WideWorldImporters;
SELECT
COUNT(OrderLineId) 'Actual Count',
COUNT(DISTINCT OrderLineId) 'Actual Distinct Count',
APPROX_COUNT_DISTINCT(OrderLineId) 'Approx Distinct Count'
FROM Sales.OrderLines;

+----------------+-------------------------+-------------------------+
| Actual Count | Actual Distinct Count | Approx Distinct Count |
|----------------+-------------------------+-------------------------|
| 231412 | 231412 | 238493 |
+----------------+-------------------------+-------------------------+

همانطور که در خوجی فوق مشاهده می کنید، مقدار تقریبی APPROX_COUNT_DISTINCT با Actual Distinct Count و Actual Count با هم برابر نیستند چرا این فقط مقدار تقریبی است.
درمثال زیر ستون دیگری(ستون description) برای شمارش در نظر گرفته شده است.

SELECT
COUNT(Description) 'Actual Count',
COUNT(DISTINCT Description) 'Actual Distinct Count',
APPROX_COUNT_DISTINCT(Description) 'Approx Distinct Count'
FROM Sales.OrderLines;

Result:

+----------------+-------------------------+-------------------------+
| Actual Count | Actual Distinct Count | Approx Distinct Count |
|----------------+-------------------------+-------------------------|
| 231412 | 227 | 226 |
+----------------+-------------------------+-------------------------+

در این حالت مقدار actual count یا actual distinct count متفات است و دلیل آن هم این است که ستون Description حاوی مقادیر تکراری زیادی است. کماکان مقدار APPROX_COUNT_DISTINCT با دو ستون دیگر متفاوت است چرا که فقط مقدار تقریبی را برمیگرداند. همانطور که گفته شد، تابع APPROX_COUNT_DISTINCT بیشتر برای big data در نظر گرفته شده است.

Check the Data Type خروجی APPROX_COUNT_DISTINCT از نوع bigint است بنابراین از این نظر بیشتر شبیه COUNT_BIG نسبت به COUNT است(البته خروجی count از نوع int است).

EXEC sp_describe_first_result_set N'SELECT APPROX_COUNT_DISTINCT(OrderLineId) FROM Sales.OrderLines', null, 0;

is_hidden                    | 0
column_ordinal | 1
name | NULL
is_nullable | 1
system_type_id | 127
system_type_name | bigint
max_length | 8
precision | 19
scale | 0
collation_name | NULL
user_type_id | NULL
user_type_database | NULL
user_type_schema | NULL
user_type_name | NULL
assembly_qualified_type_name | NULL
xml_collection_id | NULL
xml_collection_database | NULL
xml_collection_schema | NULL
xml_collection_name | NULL
is_xml_document | 0
is_case_sensitive | 0
is_fixed_length_clr_type | 0
source_server | NULL
source_database | NULL
source_schema | NULL
source_table | NULL
source_column | NULL
is_identity_column | 0
is_part_of_unique_key | NULL
is_updateable | 0
is_computed_column | 0
is_sparse_column_set | 0
ordinal_in_order_by_list | NULL
order_by_is_descending | NULL
order_by_list_length | NULL
tds_type_id | 38
tds_length | 8
tds_collation_id | NULL
tds_collation_sort_id | NULL

همانطور که مشاهده می کنید، system_type_name برابر با bigint است. این نشان دهنده آن است که خروجی این کوئری از نوع bigint است.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز