Untitled
unknown
sql
a year ago
2.0 kB
3
Indexable
Never
-- Létrehozzuk az indexeket a Products, Order Details és Orders táblákhoz USE h02_IULJVS; -- Index a Products táblához a UnitPrice oszlopra CREATE NONCLUSTERED INDEX idx_Products_UnitPrice ON dbo.Products (UnitPrice); -- Index az Order Details táblához a ProductID és Quantity oszlopokra CREATE NONCLUSTERED INDEX idx_OrderDetails_ProductID_Quantity ON [Order Details] (ProductID, Quantity); -- Index az Orders táblához az OrderDate oszlopra CREATE NONCLUSTERED INDEX idx_Orders_OrderDate ON Orders (OrderDate); -- 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 <= 10000 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ő (10000-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 Products; DROP INDEX idx_OrderDetails_ProductID_Quantity ON [Order Details]; DROP INDEX idx_Orders_OrderDate ON Orders;