2010-11-11 75 views
1

我建立一个自动提示。目前,目标应用程序是桌面应用程序,但想法是将其构建得如同强大,然后将其包含在网络中。大厦自动提示

现在我在项目的开始:思数据库(SQL Server 2008)

自动提示将是来自〜40.000.000行的表。

现在我的选择是:全文检索或建立一个表像我现在就形容:

我自动提示项目:

a b c 
1 2 3 
x y z 

结果表:

a b c    a b c 
a b c    a c b 
a b c    b a c 
a b c    b c a 
a b c    c a b 
a b c    c b a 

对于每个项目都是如此。

现在我的问题:

那些至极最好的时候,我希望尽量减少自动提示列表中选择搜索的项目?还有其他更好的吗?

谢谢!

迭戈

回答

1

在我看来FULLTEXT会更好,即使你只需要精确匹配。

然而,即使你决定不使用FULLTEXT为什么你需要索引的所有排列?您可以按字母顺序将它们编入索引(a, b, c),并将它们作为参数提供给查询,然后按相同顺序重新排列这些项目。

也就是说,你应该总是寻找C, D, O即使您的查询表示O, C, D

+0

我索引的所有排列,因为我不会找精确匹配,我想,以减少更多钞票的所有查询时间在每个搜索。因此,当用户开始提示任何字词时,我可以创建一个“%”字样,就这些了。 – Diego 2010-11-11 14:45:22

+0

@Diego:在这种情况下,你绝对应该使用'FULLTEXT'指数 – Quassnoi 2010-11-11 14:46:23

+0

@Diego:即使你决定使用'B-Tree'索引,你不需要索引的所有排列。在你的情况下,索引“a,b,c',”b,a“和”c,b“,这只是”3“记录,而不是”6“。看到这篇文章:http://explainextended.com/2009/05/09/creating-indexes/ – Quassnoi 2010-11-11 14:48:34

0

所以...你要根据部分输入到查询表与4000万点的记录,匹配​​列的任何部分(或甚至是多列),可能来自许多用户同时......并且我假设您期待次秒的响应时间。

你的数据库服务器最好是一个真正的野兽。

我强烈建议您重新考虑您的计划,或者至少限制用户的选择,例如将搜索限制在列的开头,等等。
但是,如果您决定继续此操作,则全文不在这个问题,除非在应用程序中包含某种有趣的等待光标以在自动查询查询运行时招待用户。

+0

是的,我期待亚秒响应时间。但是我保存的所有排列都完全避免了你说的话:“匹配列的任何部分(甚至是多列)”。不,只有一列,只是在开始(因为排列)。 – Diego 2010-11-12 11:29:04