Untitled
unknown
sqlserver
2 years ago
1.4 kB
11
Indexable
-- 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;Editor is loading...