SQL Server CTE-Common Table Expression-Recursive Queries in SQL-SQL Performance Optimization-CTE در SQL Server-ساختار CTE در SQL- بهینه‌سازی دیتابیس-سرعت کوئری-افزایش سرعت کوئری

مقدمه

مدیریت پایگاه داده‌ها و اجرای کوئری‌های پیچیده یکی از چالش‌های برنامه‌نویسی و تحلیل داده است. بسیاری از توسعه‌دهندگان برای اجرای عملیات‌های تکراری یا بازگشتی از ساب‌کوئری‌ها یا ویو‌ها استفاده می‌کنند، اما این روش‌ها می‌توانند پیچیدگی و کاهش عملکرد را به همراه داشته باشند CTE ابزاری قدرتمند برای نوشتن کوئری‌های تمیز، خوانا، و بهینه در SQL Server است که به شما امکان مدیریت داده‌های موقت را می‌دهد. این ساختار به ویژه برای کوئری‌های بازگشتی، محاسبات پیچیده، و افزایش خوانایی کد بسیار مفید است.

CTE چیست؟

CTE (Common Table Expression) یک مجموعه داده موقت است که به عنوان یک جدول مجازی عمل می‌کند و می‌تواند درون یک query اصلی برای فیلتر کردن، گروه‌بندی، و اجرای کوئری‌های پیچیده استفاده شود.

چرا باید از CTE استفاده کنیم؟

۱. خوانایی بالاتر

در کدهای پیچیده، خوانایی بسیار مهم است. با CTE می‌توان کدهای سازمان‌یافته‌تر و مفهومی‌تر نوشت.

۲. جایگزین مناسب برای ساب‌کوئری‌ها

ساب‌کوئری‌ها ممکن است باعث کاهش عملکرد شوند و خوانایی را کم کنند. CTE‌ها یک جایگزین خوانا و سریع‌تر برای چنین کوئری‌هایی هستند.

۳. اجرای کوئری‌های بازگشتی (Recursive Queries)

امکان پیاده‌سازی کوئری‌هایی را فراهم می‌کند که به صورت بازگشتی داده‌ها را پردازش کنند.

۴. امکان استفاده چندباره در یک کوئری

با استفاده از CTE، داده‌ها را می‌توان در همان کوئری چندین بار فراخوانی کرد.

ساختار دستورات CTE در SQL Server

WITH CTE_Name (Column1, Column2, ...) AS (
    SELECT Column1, Column2, ...
    FROM Table_Name
    WHERE Condition
)
SELECT Column1, Column2
FROM CTE_Name;

مثال‌های عملی CTE در SQL Server

۱. فیلتر کردن و گروه‌بندی داده‌ها

WITH Sales_CTE AS (
    SELECT SalesPersonID, YEAR(OrderDate) AS SalesYear, COUNT(SalesOrderID) AS TotalSales
    FROM Sales.SalesOrderHeader
    WHERE SalesPersonID IS NOT NULL
    GROUP BY SalesPersonID, YEAR(OrderDate)
)
SELECT SalesPersonID, SalesYear, TotalSales
FROM Sales_CTE
ORDER BY SalesYear DESC;

توضیح: این کوئری لیستی از فروش‌های انجام‌شده را بر اساس سال و شناسه فروشنده نمایش می‌دهد.

۲. رتبه‌بندی کاربران با ROW_NUMBER()

WITH RankedSales AS (
    SELECT SalesPersonID, OrderQty, ROW_NUMBER() OVER (PARTITION BY SalesPersonID ORDER BY OrderQty DESC) AS Rank
    FROM Sales.SalesOrderDetail
)
SELECT SalesPersonID, OrderQty, Rank
FROM RankedSales
WHERE Rank <= 5;

توضیح: این کوئری ترتیب فروش‌های انجام‌شده را برای هر فروشنده محاسبه کرده و فقط ۵ رتبه برتر را نمایش می‌دهد.

۳. پیاده‌سازی سلسله‌مراتب کارمندان (Recursive Queries)

WITH EmployeeHierarchy AS (
    SELECT EmployeeID, ManagerID, FullName, 0 AS HierarchyLevel
    FROM Employees
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.FullName, h.HierarchyLevel + 1
    FROM Employees e
    INNER JOIN EmployeeHierarchy h ON e.ManagerID = h.EmployeeID
)
SELECT EmployeeID, FullName, HierarchyLevel
FROM EmployeeHierarchy
ORDER BY HierarchyLevel, FullName;

توضیح: این کوئری یک سلسله‌مراتب (Hierarchy) سازمانی ایجاد می‌کند که ارتباط بین مدیران و کارمندان را مشخص می‌کند.

مقایسه CTE با سایر روش‌ها

ویژگیCTEساب‌کوئریویو (View)
موقت بودن
خوانایی بالا
امکان استفاده چندباره در یک کوئری
قابل استفاده در کوئری بازگشتی

محدودیت‌های CTE

  • عدم ذخیره‌سازی دائمی: CTE فقط موقت است و در دیتابیس ذخیره نمی‌شود.
  • عدم امکان استفاده از INSERT, UPDATE, DELETE روی CTE.
  • نیاز به اجرای درون یک SELECT واحد: CTE نمی‌تواند به عنوان یک جدول دائمی استفاده شود.

سؤالات متداول (FAQ)

۱. آیا CTE جایگزین ویو است؟
خیر، CTE موقتی است و بعد از اجرای کوئری از بین می‌رود، اما ویو در دیتابیس ذخیره می‌شود.

۲. آیا می‌توان با CTE چندین جدول را Join کرد؟
بله، CTE هیچ محدودیتی در استفاده از Join ندارد.

۳. بهترین کاربرد CTE چیست؟
نوشتن کوئری‌های بازگشتی، محاسبات پیچیده و جایگزینی ساب‌کوئری‌های تو در تو.

۴. آیا CTE عملکرد را بهتر می‌کند؟
بله، در بیشتر موارد خوانایی و نگهداری را بهبود می‌دهد و ممکن است سرعت را نیز افزایش دهد، اما بستگی به شرایط داده دارد.

نتیجه‌گیری

CTE‌ها یکی از مهم‌ترین ابزارهای SQL Server برای اجرای کوئری‌های خوانا، سریع، و بهینه هستند. با کمک این روش، می‌توان کوئری‌های پیچیده را ساده‌تر کرد، ساب‌کوئری‌های تو در تو را حذف کرد، و بهینه‌سازی پردازش‌های پایگاه داده را انجام داد.

ارتباط و مشاوره

اگر به دنبال آموزش تخصصی SQL Server، اجرای پروژه‌های پیچیده پایگاه داده یا بهینه‌سازی کوئری‌ها هستید؛
تیم توسعه فناوری اطلاعات لاندا آماده مشاوره و همکاری با شماست.

  • تماس  با شرکت لاندا برای مشاوره، اجرا و یا آموزش تخصصی.

نظری داده نشده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *