Untitled

mail@pastecode.io avatar
unknown
sqlserver
a year ago
1.4 kB
0
Indexable
Never
-- Lekérdezés: Az 1998-ban legtöbb alkalommal megrendelt termék árát (UnitPrice) növeli 1 dollárral
UPDATE dbo.Products
SET UnitPrice = UnitPrice + 1
WHERE ProductID IN (
    SELECT TOP 1 WITH TIES od.ProductID
    FROM [Order Details] od
    INNER JOIN Orders o ON od.OrderID = o.OrderID
    WHERE YEAR(o.OrderDate) = 1998
    ORDER BY COUNT(*) OVER (PARTITION BY od.ProductID) DESC
);

-- Mérjük a futásidőt
DECLARE @StartTime DATETIME;
DECLARE @EndTime DATETIME;
DECLARE @Duration INT;

SET @StartTime = GETDATE();

-- Futtatjuk a lekérdezést 1000-szer
DECLARE @i INT = 1;
WHILE @i <= 1000
BEGIN
    -- Futtassuk itt a lekérdezést
    -- A lekérdezés, amit itt futtat, a fentiekben található UPDATE parancs
    SET @i = @i + 1;
END

SET @EndTime = GETDATE();
SET @Duration = DATEDIFF(MILLISECOND, @StartTime, @EndTime);
PRINT 'Futási idő (1000-szer futtatva): ' + CAST(@Duration AS NVARCHAR(10)) + ' ms';

-- Automatizált eszközökkel terveztessük az indexeket
-- A Database Engine Tuning Advisor (DTA) segítségével tervezzük meg az indexeket
-- Az eredményeket tároljuk el, és értékeljük ki a teljesítményjavulást

-- Visszaállítjuk a kiinduló állapotot
-- Töröljük az elkészített indexeket
DROP INDEX idx_Products_UnitPrice ON dbo.Products;
DROP INDEX idx_OrderDetails_ProductID_Quantity ON dbo.[Order Details];
DROP INDEX idx_Orders_OrderDate ON dbo.Orders;