zoukankan      html  css  js  c++  java
  • 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');

  • 相关阅读:
    常见http状态码
    通过adb shell命令查看内存,CPU,启动时间,电量等信息
    Jmeter获取数据库数据参数化
    jmeter链接mysql数据库,sql数据库,oracle数据库
    appium 隐藏键盘
    python编码
    python:打印所有文件名字的扩展名
    python中字符串常见操作
    python中的字符串存储及切片介绍
    Ubuntu14.04安装部署bugzilla5.0.3
  • 原文地址:https://www.cnblogs.com/stevenlaz/p/4056523.html
Copyright © 2011-2022 走看看