以下是一个信息表的查询分页方式,建立了以PageTime 为聚集索引NewsID为非聚集索引,并将内容建立了全文目录,
首先希望能通过标题like "%搜索内容%" 查询出含有关键字的结果,我发现一个问题,就是某些词检索速度还可以接受3-8秒,某些词like时间就特别的慢20-90秒,我也对新闻内容的字段建立了全文索引目录,可是查询的时间还是不尽如意都是20-90秒之间,请教大家,是否有其他更好的方式能明显提高我的效率,请给出您的见解!!!十分感谢!!!--总数量
WITH tmp1 AS (
SELECT *, ROW_NUMBER() OVER(ORDER BY PageTime DESC)
as RowNumber from (
SELECT NewsID,URL,PageTime,NewsTitle,Source 
FROM Vocation WHERE 1=1 and NewsTitle like '%动物疫苗%'
AND PageTime >= '2011-01-02' 
AND PageTime <= '2011-11-30'
) AS Vocation
)select max(RowNumber ) from tmp1
--获得某页内容
WITH tmp1 AS (
SELECT *, ROW_NUMBER() OVER(ORDER BY PageTime DESC)
as RowNumber from (
SELECT NewsID,URL,PageTime,NewsTitle,Source 
FROM Vocation WHERE 1=1 and NewsTitle like '%动物疫苗%'
AND PageTime >= '2011-01-02' 
AND PageTime <= '2011-11-30'
) AS Vocation
)select * from tmp1 where RowNumber between 16 and 30

解决方案 »

  1.   

    应该上 SQL 版去问问。
      

  2.   

    因为没有top的关系select top 15.... Where between>=16
      

  3.   

    复制错了
    select top 15.... Where RowNumber >=16
      

  4.   

    top确实能有一些效率,但涉及到select max(RowNumber ) from tmp1 这里的时候就没办法top了~
      

  5.   

    你创建了全文索引,有没有启用到要查询的表呢?
    另外,使用全文索引的查询,要用 CONTAINS 关键字才能利用全文索引.
    这方面的例子,网上很多,比如:
    http://nyazheng.blog.163.com/blog/static/5712646520090191312630/
      

  6.   

    --总数量
    WITH tmp1 AS (
    SELECT *, ROW_NUMBER() OVER(ORDER BY PageTime DESC)
    as RowNumber from (
    SELECT NewsID,URL,PageTime,NewsTitle,Source 
    FROM Vocation WHERE 1=1 and NewsTitle like '%动物疫苗%'
    AND PageTime >= '2011-01-02' 
    AND PageTime <= '2011-11-30'
    ) AS Vocation
    )select max(RowNumber ) from tmp1那你觉不觉得你这样写很颓废呢select count(1) From Vocation WHERE 1=1 and NewsTitle like '%动物疫苗%'
    AND PageTime >= '2011-01-02' 
    AND PageTime <= '2011-11-30'
      

  7.   

    数量那里我写成简化的,也耗时较长,我发现一个问题是,为什么我like 动物疫苗  四个字时就特别慢,但是 有色金属 钢铁 金融 等等词都不慢很费解
      

  8.   

    才看出来,你用的是 Oracle, 如果是 DB 优化的话,应该把 DB 的 Sort 缓冲区改大,这样 Orderby 速度快。SELECT NewsID,URL,PageTime,NewsTitle,Source 
    FROM Vocation WHERE 1=1 and NewsTitle like '%动物疫苗%'
    AND PageTime >= '2011-01-02' 
    AND PageTime <= '2011-11-30'> 这里也加上 Orderby  <
      

  9.   

    我内容上确定启用了全文索引目录和对应的表,但CONTAINS(WebNewsText,'动物疫苗')的方式还是时间很长很慢估计得25-40秒
      

  10.   


    但你如果不用contains,那你的全文索引等于没建.不过用全文索引也不是很快.好一些的办法,是在表中建一个索引词典,将一些你认为会常用的检索词放到词典里,将词条与表中的记录编号相匹配,这样,在查询时先查词典,如果有的话,再由记录编号去获得表中的记录.当然,这只适用于小系统.
      

  11.   

    我想尝试qianjin036a的方式,但又遇到些问题,入库时得处理与词条匹配关系,新增的词条也得匹配上内容,有时信息入库要及时匹配,怕有漏掉的问题存在,还得增加一个索引表,一个词条会对应很多个ID。而且第一次设置新词时会耗时很长时间。
      

  12.   

    SQL Server 2005 中的分区表和索引