首先在物资名称字段建立索引,最好不要用like '%铁管%' 的查询方式,这样数据库处理时没有使用索引

解决方案 »

  1.   

    可以使用intermedia(9i称之为Text)技术解决模糊查询的问题.
    比如可以在"物资名称"字段上建立一个ctxsys.context的索引:
    create index idx_xxxx on kfwz(wzmc) indextype is ctxsys.context;
    然后使用类似
    select * from kfwz where contains(wzmc,'铁管');
    的语句进行查询,速度会很快。
    不过这个东东不是一两句话能说清楚的,可以参考相关文档。
      

  2.   

     摘录一小段:  Oracle实现全文检索,其机制其实很简单。即通过Oracle专利的词法
      分析器(lexer),将文章中所有的表意单元(Oracle 称为 term)找出
      来,记录在一组 以 dr$开头的表中,同时记下该term出现的位置、
      次数、hash 值等信息。检索时,Oracle 从这组表中查找相应的term,
      并计算其出现频率,根据某个算法来计算每个文档的得分(score),
      即所谓的‘匹配率’。而lexer则是该机制的核心,它决定了全文检索
      的效率。  Oracle 针对不同的语言提供了不同的 lexer, 而我们通常能用到其中
      的三个: 
        basic_lexer: 针对英语。它能根据空格和标点来将英语单词从句子
        中分离,还能自动将一些出现频率过高已经失去检索意义的单词
        作为‘垃圾’处理,如if , is 等,具有较高的处理效率。但该
        lexer应用于汉语则有很多问题,由于它只认空格和标点,而汉语的
        一句话中通常不会有空格,因此,它会把整句话作为一个term,事实上
        失去检索能力。以‘中国人民站起来了’这句话为例,basic_lexer
        分析的结果只有一个term ,就是‘中国人民站起来了’。此时若
        检索‘中国’,将检索不到内容。   chinese_vgram_lexer: 专门的汉语分析器,支持所有汉字字符集。该
      分析器按字为单元来分析汉语句子。‘中国人民站起来了’这句话,
      会被它分析成如下几个term: ‘中’,‘中国’,‘国人’,‘人民’,
     ‘民站’,‘站起’,起来’,‘来了’,‘了’。可以看出,这种分析
      方法,实现算法很简单,并且能实现‘一网打尽’,但效率则是差强人意。   chinese_lexer: 这是一个新的汉语分析器,只支持utf8字符集。上面
      已经看到,chinese vgram lexer这个分析器由于不认识常用的汉语词
      汇,因此分析的单元非常机械,像上面的‘民站’,‘站起’在汉语
      中根本不会单独出现,因此这种term是没有意义的,反而影响效率。
      chinese_lexer的最大改进就是该分析器 能认识大部分常用汉语词汇,
      因此能更有效率地分析句子,像以上两个愚蠢的单元将不会再出现,极大
      提高了效率。但是它只支持 utf8, 如果你的数据库是zhs16gbk字符集,则
      只能使用笨笨的那个Chinese vgram lexer.    ...
      

  3.   

    全文索引也是一种办法
    也可以建立函数索引:
    create index index_name on tabname(instr(wzmc,'铁管'));
      

  4.   

    TO  chanet(牧师) "建索引就行",这句话说的也太不负责任了!
    建索引并不是提高查询速度的“万金油”,要看具体的SQL是否利用上了索引,就像这样的条件“物资名称 like '%铁管%'”,对“物资名称”建索引是无用的,除非像波波那样建函数索引,或者建立全文索引才能用到索引,从而提高查询速度。建索引就能够提高查询速度对初学者是个误导。