• sqlserver,mysql,oracle通用的模拟和改进的全文搜索算法


    问:数据库效率最低的地方是什么?

    答:表扫描

    问:表扫描常见的情况是

    答:like '%a%' 这类查询

    如果使用全文检索引擎,又无法满足我们的需求的时候怎么办,比如要从

    一个商品名称 "农夫山泉300ml"  里面查找"泉3" ,全文搜索引擎就失效了。

    我们可以改进为:

    1.建立一个 索引表,这个表里面str允许保存若干字符,作为非聚集索引

    create table t1 (id1 identity(1,1) primary key ,  str varchar(10), goods_id integer);

    在str上建立非聚集索引

    2.当我们保存新的商品信息的时候

    将 "农夫山泉300ml" 拆分成

    goods_id=1

    insert into t1(str,goods_id)values('农',1);

    insert into t1(str,goods_id)values('夫',1);

    insert into t1(str,goods_id)values('农夫',1);

    insert into t1(str,goods_id)values('山泉',1);

    insert into t1(str,goods_id)values('泉3',1);

    ...

    等任意组合的若干连续字符的索引记录。

    当需要模糊查找 like '%泉3%'的时候,变成

    select * from goods where goodsid in (select distinct goods_id from t1 where str='泉3');

    这种方法,在很多的论坛一类的代码中有体现。

    不过,这种方法更加适合需要模糊查询的字段比较短,而查询又有模糊,又有大量关联的情况,比如:

    select * from goods, purchase where goods.goodsid=purchase.goodsid and goodsname like '泉3';

    这种情况.转换后是

    select * from goods, purchase where goods.goodsid=purchase.goodsid and  goodsid in (select distinct goods_id from t1 where str='泉3');

  • 相关阅读:
    shell命令finger
    join命令
    日志记录
    shell命令xargs
    linux read 简介
    P1601 A+B Problem(高精)
    P2670 [NOIP2015 普及组] 扫雷游戏
    P1042 [NOIP2003 普及组] 乒乓球
    P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    P5744 【深基7.习9】培训
  • 原文地址:https://www.cnblogs.com/stevenlaz/p/4056523.html
Copyright © 2020-2023  润新知