如何快速比较一个表中的记录?

时间:2016-03-05 07:41:50

标签: sql sql-server performance query-optimization

我有一个用表格进行文献研究的项目(在SQL Server 2014中)。我从一些书中提取单词到比较表。这张表可能有数千个单词。 我写了一个查询来比较不同文档中的单词,并希望并排显示它们,以显示不同书中的每个单词频率。 写下这个:

SELECT c1.Word,c1.DocumentID,c1.WordCount,c2.DocumentID,c2.WordCount 
FROM dbo.Comparation c1 
JOIN dbo.Comparation c2 ON c2.Word = c1.Word AND c1.DocumentID <> c2.DocumentID

此查询在我的计算机上需要15秒。然后我决定逐页显示它们并写下:

SELECT c1.Word,c1.DocumentID,c1.WordCount,c2.DocumentID,c2.WordCount 
FROM dbo.Comparation c1 
JOIN dbo.Comparation c2 ON c2.Word = c1.Word AND c1.DocumentID <> c2.DocumentID 
ORDER BY c1.DocumentID OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY;

现在有15个或更多的记录检索速度很好,但我的问题是: 当偏移量很小时,每件事情都可以,但是当我增加偏移时,查询运行速度很慢。 有没有办法快速加载和比较这些单词?

谢谢。

最诚挚的问候。

Comparison table

1 个答案:

答案 0 :(得分:0)

看起来你正在加入nvarchar专栏&#34; Word&#34;。正如here所解释的那样,当在大量行上使用时会出现性能问题。

尝试生成额外的&#34; WordID&#34;列,对于每个单词都是唯一的,然后加入。