Dizine eklenmiş bir görünümün performansını test ediyorum. Aşağıda kullandığım kodlar. AdventureWorks2012 Veritabanı kullanıyorum.İndeksli görünüm neden performansı artırmıyor?
--sonuç Test tabloları
tablolardaSELECT *
INTO Person.Person_Test
FROM [Person].[Person]
go
SELECT *
INTO Person.PersonPhone_Test
FROM [Person].[PersonPhone]
go
SELECT *
INTO Person.BusinessEntityAddress_Test
FROM [Person].BusinessEntityAddress
go
SELECT *
INTO Person.Address_Test
FROM [Person].Address
go
SET STATISTICS IO ON
SET STATISTICS TIME ON
--sonuç endeksler görünüşüdür
CREATE VIEW My_View WITH SCHEMABINDING AS
SELECT P.BusinessEntityID,P.FirstName,P.LastName, PH.PhoneNumber,PH.PhoneNumberTypeID,BU.AddressID,AD.AddressLine1
FROM Person.Person_Test P
INNER JOIN Person.PersonPhone_Test PH
ON P.BusinessEntityID=PH.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress_Test BU
ON P.BusinessEntityID=BU.BusinessEntityID
INNER JOIN Person.Address_Test AD
ON BU.AddressID=AD.AddressID
WHERE P.BusinessEntityID BETWEEN 50 AND 10000 AND AD.AddressID BETWEEN 100 AND 1000
GO
sonra dört masa göre --sonuç
CREATE CLUSTERED INDEX Person1 ON Person.Person_Test (BusinessEntityID);
CREATE CLUSTERED INDEX PersonPhone1 ON Person.PersonPhone_Test (BusinessEntityID);
CREATE CLUSTERED INDEX BusEntity1 ON Person.BusinessEntityAddress_Test (BusinessEntityID);
CREATE INDEX BusEntity2 ON Person.BusinessEntityAddress_Test (AddressId);
CREATE CLUSTERED INDEX AddressInd1 ON Person.Address_Test (AddressId);
I testi dizinsiz performans (Query1)
--Test regular view
SELECT BusinessEntityID,LastName,PhoneNumber,AddressID, AddressLine1
FROM My_View
WHERE BusinessEntityID between 50 and 200
aldım mesajım: 1. Ben de eklemek yukarıdaki Sorgu yeniden çalıştırın
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 8 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
(91 row(s) affected)
Table 'Address_Test'. Scan count 91, logical reads 185, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'PersonPhone_Test'. Scan count 91, logical reads 184, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Person_Test'. Scan count 91, logical reads 286, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'BusinessEntityAddress_Test'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 1 ms.
Sonra ben de aynı mesajı aldı,
CREATE UNIQUE CLUSTERED INDEX idx_MyView ON My_View(BusinessEntityID);
go
Ancak görünümde endeksi eklemek Yürütme planı burada. Görünüm dizine eklendiğinde veya dizine eklenmediğinde, Yürütme planlarının ikisi de aynıdır.
Kaçırdığım bir şey var mı? Görünüme dizin ekledikten sonra performans neden aynı?
Dizinleri masaya bırakın ve sınamasını tekrar yapın. planınızda tüm işlemler index_seek kullanıyor. SQL, tablolarda dizinleri kullanıyor, bu yüzden görünümünüzde dizin olup olmadığını farketmez. optimize edicinin çok akıllı olduğunu unutmayın.yine de, dba sitesinde yayınlarsanız daha iyi cevap alabilirsiniz. http://dba.stackexchange.com – FLICKER
Hangi sürüm os sql-server? Standart veya Kurumsal? Sorguyu, queryhint NOEXPAND ile çalıştırmayı düşünün. – mxix
@mxix Haklısınız. NOEXPAND bana başka bir mesaj veriyor. – NewGuyComesIn