查询单词和同义词表的最有效方法



我有一个包含单词及其同义词的WORDTB表:ID, WORD1, WORD2, WORD3, WORD4, WORD5。这些词是按照它们出现的频率排列的。当给定任何单词时,我想查询并检索该特定单词的最常见同义词,即WORD1列中的单词。

这是我尝试的查询,它工作得很好,但我认为这是低效的。

SELECT WORD1 
FROM WORDTB 
WHERE WORD1='xxxx' 
   OR WORD2='xxxx' 
   OR WORD3='xxxx' 
   OR WORD4='xxxx' 
   OR WORD5='xxxx'

有谁能提出更有效的方法吗?

一个更可扩展的解决方案是对每个单词使用单行。

synonym_words(word_id, synonym_id, word, popularity)

字段:

  • word_id:字的主键。
  • synonym_id:第一个同义词的word_id。
  • word:同义词文本。
  • popularity:同义词列表的排序顺序,1是最流行的。

示例表数据:

word_id | synonym_id | word       | popularity
==============================================
1       | 1          | start      | 1
2       | 1          | begin      | 2
3       | 1          | originate  | 3
4       | 1          | initiate   | 4
5       | 1          | commence   | 5
6       | 1          | create     | 6
7       | 1          | startle    | 7
8       | 1          | leave      | 8
9       | 9          | end        | 1
10      | 9          | ending     | 2
11      | 9          | last       | 3
12      | 9          | goal       | 4
13      | 9          | death      | 5
14      | 9          | conclusion | 6
15      | 9          | close      | 7
16      | 9          | closing    | 8

假设这些单词不会改变,但它们的流行度可能随着时间的推移而改变,那么如果您要改变单词的流行度顺序,从而改变一个单词最流行的同义词,查询应该不会中断。您希望查询返回与搜索中使用的单词具有相同同义词_id的最流行单词(popularity = 1)。

SQL查询:

SELECT word FROM synonym_words
WHERE synonym_id = (SELECT synonym_id FROM synonym_words WHERE word = 'conclusion')
AND popularity = 1

最新更新