日期:2014-05-18  浏览次数:20974 次

全文索引带来的排序问题
我用的是sql   server   2005.
有一个百万数据的表,使用全文索引时有这样的问题:

查询前8条
SELECT   TOP   8   ID   FROM   MyView   WHERE   CONTAINS(Ename, '新闻 ')
得到结果如下:
4
15
68
98
155
187
205
287

查询前16条
SELECT   TOP   16   ID   FROM   MyView   WHERE   CONTAINS(Ename, '新闻 ')
得到结果如下:
315842
315893
374112
221583
…………
338420

就是   TOP   16   的结果里面不包含   TOP   8   的结果,如果强制排序:
SELECT   TOP   8   ID   FROM   MyView   WHERE   CONTAINS(Ename, '新闻 ')   ORDER   BY   Etime   ASC
SELECT   TOP   16   ID   FROM   MyView   WHERE   CONTAINS(Ename, '新闻 ')   ORDER   BY   Etime   ASC
强制排序的话   TOP   16   的结果就包含   TOP   8   的结果。这给分页带来很大的麻烦。

主要问题是:
分页有问题,而且用全文索引也破坏了我聚集索引的排序,所以必须用排序,但用排序的话查询时间就从   13ms   狂增到   1500ms   以上

想请教高手这是全文索引本身的问题还是我的使用有问题啊?我的唯一索引是   ID   ,聚集索引是Etime   ,全文索引建在Ename以及另外两个字段上,简体中文。

如果是全文索引本身的问题,有没有办法优化啊?




------解决方案--------------------
还 真不清楚...
------解决方案--------------------
不知道
------解决方案--------------------
Up。
------解决方案--------------------
全文搜索相关度可用rank排序

如:
SQL = "Select top "& MaxStr &" * From book t Inner Join FreeTextTable(book,(title,class,出版社,作者),'"& Key &"') k on t.xmlid = k.[key] Order By k.rank desc"