Database 搜索字符串的最佳查询是什么?它出现在一个表的多个列中?
好的,比如说,我得到了一个有3列的表:c1,c2,c3Database 搜索字符串的最佳查询是什么?它出现在一个表的多个列中?,database,search,query-optimization,Database,Search,Query Optimization,好的,比如说,我得到了一个有3列的表:c1,c2,c3 C1-C2-C3 A2-B2-N2 K1-B2-N1 K1-B3-N1 L1-A2-C1 好的,当用户搜索A1、A2、A3、B1、B2的任意组合时。。。然后,系统可以选择与壁橱匹配的行(这意味着只要单词出现在一列中,系统就会选择它,在更多列中出现的单词越多,它就越匹配),并根据最接近的匹配对它们进行排序 Ex1:用户搜索“K1 A2 C1 N1”,系统将显示: K1-B2-N1 K1-B3-N1 A2-B2-N2 L1-A2-C1 Ex2:
C1-C2-C3
A2-B2-N2
K1-B2-N1
K1-B3-N1
L1-A2-C1 好的,当用户搜索A1、A2、A3、B1、B2的任意组合时。。。然后,系统可以选择与壁橱匹配的行(这意味着只要单词出现在一列中,系统就会选择它,在更多列中出现的单词越多,它就越匹配),并根据最接近的匹配对它们进行排序 Ex1:用户搜索“K1 A2 C1 N1”,系统将显示:
K1-B2-N1
K1-B3-N1
A2-B2-N2
L1-A2-C1 Ex2:用户搜索“K1 A2 C1 N2 B2”,系统将显示:
A2-B2-N2
L1-A2-C1
K1-B2-N1
K1-B3-N1 我的解决方案是将搜索字符串拆分为单独的单词&然后根据表中的列搜索每个单词。但我不确定它是否是最佳查询,因为数据库必须在许多循环中搜索 那么,如果你是数据库专家,那么在这种情况下最好的查询是什么
select c1
,c2
,c3
,case when c1 in ('K1','A2','C1','N1') then 1 else 0 end
+case when c2 in ('K1','A2','C1','N1') then 1 else 0 end
+case when c3 in ('K1','A2','C1','N1') then 1 else 0 end as sortweight
from theTable
where c1 in ('K1','A2','C1','N1')
or c2 in ('K1','A2','C1','N1')
or c3 in ('K1','A2','C1','N1') order by sortweight desc
,c1
,c2
,c3
其他论坛的人提出了上述问题