SQL Server Indexes

Kopie von AdventureWorks von Backup wiederherstellen

Die Übung (wir verwenden die gleiche Datenbank: https://www.mssqltips.com/tutorial/sql-server-index-maintenance/)

alt text

alt text

SalesOrderIDSalesOrderDetailIDCarrierTrackingNumberOrderQtyProductIDSpecialOfferIDUnitPriceUnitPriceDiscountLineTotalrowguidModifiedDate
4365914911-403C-98177612024,9940,002024.994000B207C96D-D9E6-402B-8470-2CC176C422832011-05-31 00:00:00.000

Tabelle Kopieren

-- Heap-Tabelle (ohne Index)
SELECT * INTO [Sales].[SalesOrderDetail_Heap] FROM [Sales].[SalesOrderDetail];

-- Clustered Index Tabelle
SELECT * INTO [Sales].[SalesOrderDetail_Clustered] FROM [Sales].[SalesOrderDetail];

-- Non-Clustered Index Tabelle
SELECT * INTO [Sales].[SalesOrderDetail_NonClustered] FROM [Sales].[SalesOrderDetail];

-- Clustered Columnstore Index Tabelle
SELECT * INTO [Sales].[SalesOrderDetail_ClusteredColumnstore] FROM [Sales].[SalesOrderDetail];

Um die Performance zu testen kann SET STATISTICS IO ON; verwendet werden.

Heap (ohne Index)

SELECT * FROM [Sales].[SalesOrderDetail_Heap] WHERE SalesOrderID = 43659;

Scananzahl 1, logische Lesevorgänge 1498, CPU-Zeit = 15 ms, verstrichene Zeit = 15 ms. alt text

Clustered Index

Create Clustered Index

CREATE CLUSTERED INDEX CIX_SalesOrderDetail_SalesOrderID
ON [Sales].[SalesOrderDetail_Clustered](SalesOrderID);
SELECT * FROM [Sales].[SalesOrderDetail_Clustered] WHERE SalesOrderID = 43659;

Scananzahl 1, logische Lesevorgänge 3,CPU-Zeit = 0 ms, verstrichene Zeit = 0 ms. alt text

Non-Clustered Index

Create Non-Clustered Index

CREATE NONCLUSTERED INDEX NCIX_SalesOrderDetail_SalesOrderID
ON [Sales].[SalesOrderDetail_NonClustered](SalesOrderID);
SELECT * FROM [Sales].[SalesOrderDetail_NonClustered] WHERE SalesOrderID = 43659;

Scananzahl 1, logische Lesevorgänge 14, CPU-Zeit = 0 ms, verstrichene Zeit = 0 ms. alt text

Columnstore Index

Create Columnstore Index

CREATE CLUSTERED COLUMNSTORE INDEX CCIX_SalesOrderDetail
ON [Sales].[SalesOrderDetail_ClusteredColumnstore];
SELECT * FROM [Sales].[SalesOrderDetail_ClusteredColumnstore] WHERE SalesOrderID = 43659;

Scananzahl 1, logische Lesevorgänge 0,CPU-Zeit = 15 ms, verstrichene Zeit = 10 ms. alt text

Column Store indexes are optimized for read-heavy operations and analytical queries, making them ideal for data warehousing scenarios. They store data in a compressed format, which can significantly reduce storage requirements and improve query performance for large datasets. However, they may not perform as well for transactional workloads that involve frequent updates or inserts.

FullText Indexes

Navigation