kurumsal olmayan sürüm ve performans için noexpand ipucu


11

Performansa ulaşmak için Dizine Alınmış görünümleri kullanmalıyım. Bu karşılaştırma tablosundan görebildiğim gibi standart sürüm dizinlenmiş görünümleri desteklemiyor. Ancak BOL diyor ki:

Dizinlenmiş görünümler SQL Server'ın herhangi bir sürümünde oluşturulabilir. SQL Server Enterprise'da, sorgu optimize edici otomatik olarak dizinlenmiş görünümü dikkate alır. Dizinlenmiş bir görünümü diğer tüm sürümlerde kullanmak için NOEXPAND tablo ipucu kullanılmalıdır.

Öyleyse işe yarayacak mı (performanstan bahsediyorum)

select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)

SQL Server Standard sürümünde olduğu gibi çalışıyor

select * from dbo.OrderTotals

Kurumsal

İşte görünüm için kod:

CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select 
    OrderId     =   r.OrderId                   
  , TotalQty            =   SUM(r.Quantity)
  , TotalGrossConsid    =   SUM(r.Price * r.Quantity)
  , XCount      =   COUNT_BIG(*)
from dbo.Order r
group by r.OrderId

CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)

Yanıtlar:


14

Fark, ipucu içermeyen Enterprise sürümünün dizine alınmış görünümü değil, temel tabloları kullanmaya karar verebilmesidir.

Benim kişisel deneyimim SQL Server'ın bu konuda biraz cesur olması. Hemen hemen her zaman ipucu kullanmak zorunda: planı temel tablolarda arar dizinde değil bir tarama görünümü "kötü" görünüyor "sorgusu çok daha az IO ile daha hızlı. Ve daha tutarlı bir şekilde çalışıyor

YMMV elbette :-)

Yani, cevaplamak için, gördüklerime dayanarak aynı şekilde çalışacak mı? Diğer halkların farklı deneyimleri olabilir ve diğer cevaplarla ilgileniyorum

İpucunu her yerde kullanmaktan kaçınmak için, dizine alınan görünümü başka bir görünümde ipucu ile sarabilirsiniz: ipuçlarının içe doğru tüm dış sorgulara yayılması otomatik olarak NOEXPAND'a sahip olacaktır.


OrderTotals ile (noexpand, index = IXCU_xxx) seçin * gibi şema bağlama ile dış görünüm oluşturmaya çalıştığınızda "Dizin ipuçları şemaya bağlı bir nesne içinde belirtilemez" var. :)
garik

2
@garik: İndeks ipucuna değil, sadece NOEXPAND'ım olurdu. Zaten tek bir dizin var: kümelenmiş, bu yüzden tablo taraması = dizin taraması
gbn

tartışma yok. kapalı :)
garik

Woaaa ... gömme NOEXPAND ... Akıllı, luv it ...
Jérôme Verstrynge
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.