olarak bir sütun değeri kullanarak CONTAINS
yüklemi kullanan varolan bir işlemin yeniden yazılmasıyla ilgili bir sorun yaşıyorum. Varolan işlem bir CURSOR
kullanarak çalışıyor, ancak gerçekten yavaş ve daha fazla veri eklendikçe yavaşlıyor.SQL Server KONTROLLER Predicate - <include_condition>
İki tablo içeren basit bir örnek (aşağıdaki kodu) kadar yapmış - Bir Tam Metin Endeksli ve diğer birinci satırları seçmek için bir CONTAINS
koşulu tanımlayan bir sütun vardır.
Geçerli saklı yordam, @filter
değişkenini ayarlayarak ikinci tabloya geçiş yapmak için CURSOR
kullanır, ardından eşleşen ilk tablodaki satırları bulmak için CONTAINS
kullanır. Sorun saatlerce çalıştığı ve daha da kötüye gitmesi.
İşlemi hızlandırmak için, CONTAINS
yüklemini doğrudan imlecin ağrısından geçmek yerine sütun değerinde kullanmayı denedim ... ancak bir sözdizimi hatası alıyorum. Benim örneğim aşağıda.
CROSS APPLY
'u uygulamayı denedim ve ayrıca şans tanımayan Kullanıcı Tanımlı Bir İşlev (fnCONTAINS
) yazmayı denedim.
IF (object_id('Players') IS NOT NULL)
DROP TABLE Players
go
IF (object_id('TeamNeeds') IS NOT NULL)
DROP TABLE TeamNeeds
go
-- create fulltext catalog ft as default
go
CREATE TABLE Players
(
PlayerID INT IDENTITY(1, 1),
PlayerName VARCHAR(20),
PlayerPositions VARCHAR(60)
)
go
CREATE UNIQUE INDEX IXPlayerID
ON Players(PlayerID)
go
CREATE fulltext INDEX ON Players(PlayerPositions) KEY INDEX IXPlayerID
go
INSERT Players
(PlayerName,
PlayerPositions)
VALUES('Patrick Travers',
'Pitcher,Left Field,Center Field,Right Field,Shortstop')
go
CREATE TABLE TeamNeeds
(
TeamID INT,
Keywords VARCHAR(50)
)
go
INSERT TeamNeeds
(TeamID,
Keywords)
VALUES(1,
'"Center Field" and "Shortstop" and "Pitcher"')
go
WAITFOR delay '00:00:05'
go -- Give the Full Text Index process time to populate the catalog
SELECT PlayerID,
PlayerName,
PlayerPositions
FROM Player,
TeamNeeds
WHERE CONTAINS(PlayerPositions, Keywords)
go -- Syntax error on Keywords...
SELECT PlayerID,
PlayerName,
PlayerPositions
FROM Players,
TeamNeeds
WHERE CONTAINS(PlayerPositions, '"Center Field" and "Shortstop" and "Pitcher"')
go -- Works just fine, but requires setting an explicit search expression for every search, which is terribly slow
Yorum ayırıcısını kaldırdım, böylece kodunuzu daha okunabilir hale getirin. – Khan
Bu soruyu cevaplamak için de arıyorum. Stackoverflow ve ms belgelerine baktım ama CONTAINS yapılamıyor gibi görünüyor (table1.col, table2.col). Sadece CONTAINS (table1.col, 'text') veya CONTAINS (table1.col, @some_text) yapabilirsiniz. Umarım birileri gelir ve yanlış olduğunu kanıtlar. – Nico
Bu sorunun nasıl çözüleceğini anladınız mı? Bende aynı problemi yaşıyorum. –