Nous essayons d'utiliser la recherche de texte intégral sur la base de données Azure et nous avons eu des problèmes de performances lors de l'utilisation de la recherche CONTAINS.La recherche plein texte avec CONTAINS est très lente
Nos données ont un schéma en étoile, la table de faits a un index de magasin de colonnes en cluster activé et environ 40 millions de lignes. Ci-dessous est la façon dont nous utilisons CONTIENT sur la dimension et une agrégation sur la table d'information sur les différentes requêtes:
Requête 1 avec exists:
SELECT f.[FK_DimCompanyCodeId], SUM(f.NetValueInUSD)
FROM [SPENDBY].[FactInvoiceDetail] f
WHERE EXISTS (
SELECT * FROM [SPENDBY].[DimCompanyCode] d
WHERE f.[FK_DimCompanyCodeId] = d.Id
AND CONTAINS(d.*, 'Comcast'))
GROUP BY f.[FK_DimCompanyCodeId]
ORDER BY SUM(f.NetValueInUSD) DESC
Cette requête semble courir pour toujours et ne reviennent jamais le résultat.
Il y a index non-cluster sur la clé étrangère FK_DimCompanyCodeId]
et il n'y a qu'une seule ligne de retour lors de la recherche Comcast
:
SELECT id FROM [SPENDBY].[DimCompanyCode] d
WHERE CONTAINS(d.*, 'Comcast');
-- will return id = 5
Et il y a environ 27 millions de lignes de table de faits qui a FK_DimCompanyCodeId = 5
.
Requête 2 en utilisant INNER JOIN:
SELECT f.[FK_DimCompanyCodeId], SUM(f.NetValueInUSD)
FROM [SPENDBY].[FactInvoiceDetail] f
INNER JOIN [SPENDBY].[DimCompanyCode] d ON (f.[FK_DimCompanyCodeId] = d.Id)
WHERE CONTAINS(d.*, 'Comcast')
GROUP BY f.[FK_DimCompanyCodeId]
ORDER BY SUM(f.NetValueInUSD) DESC
Cette requête semble courir pour toujours et ne reviennent jamais le résultat aussi bien.
Requête 3 en utilisant le tableau #temp:
SELECT id INTO #temp FROM [SPENDBY].[DimCompanyCode] d
WHERE CONTAINS(d.*, 'Comcast');
SELECT f.[FK_DimCompanyCodeId], SUM(f.NetValueInUSD)
FROM [SPENDBY].[FactInvoiceDetail] f
WHERE EXISTS (
SELECT * FROM #temp
WHERE f.[FK_DimCompanyCodeId] = #temp.Id)
GROUP BY f.[FK_DimCompanyCodeId]
ORDER BY SUM(f.NetValueInUSD) DESC
très rapide, renvoie le résultat au bout de 5 secondes.
Pourquoi la recherche en texte intégral est si lent dans les cas 1 et 2.
Trouvé question connexe: https://stackoverflow.com/questions/2750870/sql-serve-full-text-search-with-containstable-is-very-slow-when-used-in-join –
Êtes-vous en mesure d'ajouter des plans d'exécutions réelles (le x ml) à partir de vos requêtes? Ce serait vraiment utile. – wBob