有300万条记录,用 like 慢的不行,使用全文索引,每次找的都不全,怎么办?
如果找不全记录,那不就没用了。Select Count(*) From [Table_Name] Where [Name] Like '%酒店%'Select Count(*) From [Table_Name] Where Contains([Name],'"*酒店*"')第一条太慢,第二条找不全。
这个问题有解吗?要怎么查才能快又准确。
头都大了。

解决方案 »

  1.   

    Name是主键?
    不是的话有索引?
    你的全文索引设在哪个字段?
      

  2.   

    什么数据库啊?sql2k 的话300w条记录也不会很慢啊.
      

  3.   

    好奇?你用的是什么数据库呢?Contains([Name],'"*酒店*"')?
      

  4.   

    回楼上3位
    --------
    Sql Server 2005
    Name 不是主键,非聚集索引,没有索引的字段是不能 Contains 的Contains([Name],'"*酒店*"')
    Contains([Name],'"酒店"')
    Contains([Name],'酒店')
    都可以用,还有 FreeText,反正是找不全记录。
    Sql Server 2005 帮助里有这样的用法
      

  5.   

    没办法,只能这样了。
    300万条记录,你做个分类,以分类做为索引.先查分类后再查其它字段 ike .
    注:使用like 条件查询,条件字段原来的索引失效。
      

  6.   

    试试Select Count(Table_Name表的主键) From [Table_Name] Where [Name] Like '%酒店%' 
      

  7.   

    全文索引有个单字或词的匹配权重问题,要实现象LIKE那样的功能,速度又要快,似乎很难
      

  8.   

    去 MS-SQL Server 问。
      

  9.   

    sql的优化
    我所说的意思是,如果单独使用like来查询300w条记录,是不可能快的了,因为在sql使用like in 等不定条件时,原来的索引是无效的;既然如此,只好另想办法
    1 你的表结构增加一个大分类(应该300w条记录总有个分类吧)且索引。
    2 sql 语句多增加个分类的条件,是否检索的数据量会小一点。
    3 sql 语句有一条优化原则:不定条件放在前面,确定的条件放在后面。
    所以:
    Select Count(*) From [Table_Name] Where [Name] Like '%酒店%' 再增加个明确的分配条件或其它明确的条件
    如果一个分类数据量还太大,那只好再细化子类了。
    看百度也是先分类再查
     新闻   网页   贴吧   知道   MP3   图片   视频     
    默认是网页
      

  10.   

    仅仅靠sql语句是无法实现更好的优化。可以参考一下 Lucene .net