SQL Server tam metin sorguları performansını

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir: 2549443
Özet
Bu makalede, tam metin arama koşullarına ( içerir ve CONTAINSTABLEgibi) kullanan ve aynı zamanda, verilere filtre Microsoft SQL Server sorgu performansını artırmak için bir yöntem. Örneğin, bu yöntem, aşağıdaki sorgu performansını artırır:
select * from dbo.ftTest where CONTAINS(TextData, '"keyword"') and CDate > @date
Bu yöntem, tasarım sorgu, tablo şeması ve ilişkisel altyapısı için gönderilmeden önce tam metin arama motoru sonuçları filtreleri şekilde tam metin dizini sağlar. Bu nedenle, büyük bir veri kümesini filtrelemek ilişkisel altyapısı yok.
Daha fazla bilgi
Tam metin arama motoru kalan önce işlenmesi gerekir veri miktarını etkiler sorgu performansını olduğunu tam metin arama sorgu ilkesi faktörü oluşturduğunuzda, veriler ilişkisel altyapısı için gönderilir. SQL Server'da, daha sonra işlenen satır sayısını azaltmak için erken satırları süzme yoluyla sorgu performansını artırabilirsiniz.

SQL Server 2008'den önce yayımlanan sürümlerinde SQL Server, tam metin arama motoru arama terimiyle eşleşen tüm satırları döndürür ve sonra ilişkisel altyapısı herhangi bir filtre uygular. SQL Server 2008, SQL Server 2008 R2 ve SQL Server 2012 Bu davranış geliştirmeler yapılmıştır. Ancak, tam metin arama dizinlerini veritabanı dizin çok farklı şekilde düzenlendiğinden Bu geliştirmeler kullanmak zordur. Ayrıca, tam metin arama motoru ve ilişkisel altyapısı çok farklı şekilde çalışır. Bu nedenle, bu makalede açıklanan yöntemi erken satırları süzmek için ve daha sonra işlenen satır sayısını azaltmak için Table-Valued işlev (TVF) kullanır.

Örneğin, aşağıdaki sorgu planını içerir arama dizesiyle eşleşen 131051 satır döndürür. Ayrıca, dizin arama kullanarak ek filtre uygulama planı birleştirme işleci gerçekleştirir.
Rows StmtText -------------------- -----------------------------------------------------------------------------------------------------------1167 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate> '08/05/2019' 1167 |--Merge Join(Left Semi Join, MERGE:([FTSdb].[dbo].[fttest].[ID])=(FulltextMatch.[docid]), RESIDUA5858 |--Sort(ORDER BY:([FTSdb].[dbo].[fttest].[ID] ASC)) 5858 | |--Clustered Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[clidx1]), SEEK:([FTSdb].[131051 |--Table-valued function 
Sorgu bir koşul olarak tam metin benzersiz dizin anahtar sütunu içeriyorsa, ancak, tam metin arama motoru karşılaştırma tam metin düzeyinde sonuçlarını süzmek için kullanabilirsiniz. Bu durumda, ek filtre uygulanması gereken önce TVF daha bir çok küçük miktarda veri döndürür. Örneğin, aşağıdaki sorgu c2 koşulla eşleşmesi gerekir beş değerleri belirtir ve TVF beş değerlerle aynı sonuçları verir:
Rows StmtText -------- ---------------------------------------------------------------------------------------------------------------------------------5 select CDate, ID from dbo.fttest where contains (c2, '"create"') and CDate > '08/05/2019' and ID in ( 654051, 644051, 649106, 465, 105)5 |--Nested Loops(Left Semi Join, OUTER REFERENCES:([FTSdb].[dbo].[fttest].[ID])) 5 |--Index Seek(OBJECT:([FTSdb].[dbo].[fttest].[idx1]), SEEK:([FTSdb].[dbo].[fttest].[ID]=(105) OR ...5 |--Table-valued function
Tam metin arama motoru benzersiz dizin anahtarı tarafından kullanılan değerleri aşağı itme yeteneği aşağıdaki yöntemi temelidir.

Bir karşılaştırma bir DateTime veri türü sütununu içeriyorsa, yalnızca bu koşul eşleşen satırlar yayılan böylece benzersiz dizin anahtar sütunu, tarih bilgileri içerebilir. Bunu yapmak için mantıksal olarak anahtar sütunundaki tarih bilgileri eklemeniz gerekir. Ancak, aynı zamanda anahtar sütununun veri türü ve sorgu kullanan uygulamalar değiştirmeniz gerekebilir.

Yöntemi uygulamak için tam metin benzersiz veri türünü değiştirmek anahtar kimliği için BIGINT. İlk 4 bayt anahtar kimliği yakalama, yıl, ay ve tarih sütunu ve son 4 bayt değerleri tarih aynı kalır. Örneğin, anahtar kimliği yıl için başvurabileceğiniz ilk baytı, ay sonraki bayt başvurabileceğiniz ve son iki bayt tarihe başvuruyor olabilir. Uygulama, bu veri türü değişikliği uyum gerekir.

Daha sonra aralık koşul için bir koşul anahtar çevirmek kimliği. Örneğin, "x<>< y"="" range="" predicate="" can="" be="" translated="" to="" the="" "(x*2^32="">< id="">< y*2^32)"="" predicate.="" because="" the="" translated="" predicate="" is="" a="" predicate="" on="" the="" full-text="" key,="" the="" predicate="" will="" be="" pushed="" down="" into="" the="" full-text="" streaming="" table-valued="" functions="" (stvf).="" this="" behavior="" effectively="" performs="" searches="" within="" the="" date="">

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 2549443 - Son İnceleme: 03/22/2013 08:09:00 - Düzeltme: 2.0

Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Enterprise Evaluation, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Enterprise

  • kbmt KB2549443 KbMttr
Geri bildirim