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');
sqlserver,mysql,oracle通用的模拟和改进的全文搜索算法的更多相关文章
- C#操作SqlServer MySql Oracle通用帮助类
C#操作SqlServer MySql Oracle通用帮助类 [前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系 ...
- C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)
[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需 ...
- java JDBC链接sqlserver/mysql/oracle
今天初学数据库的一些简单创建数据库和表,并进行简单的查询,插入. 接下学习的就是java工程中怎么链接数据库呢.主要的方法和用到的类如下. 切记,mysql需要的jar包 mysql-connecto ...
- jdbc连接sqlserver,mysql,oracle
class xxx{ private static String port = "1433"; private static String ip = "192.168.2 ...
- SQL Server,MySQL,Oracle三者的区别
SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...
- mysql oracle postgresql 体系架构对比
2个角度sqlservermysqloracle 12cpostgresql如果从create database角度来看 那么一个实例是可以对应多个数据库的~如果从实例和磁盘上的数据库文件(数据文件. ...
- 针对各主流数据mysql、sqlserver、oracle中文乱码问题。
针对各主流数据mysql.sqlserver.oracle当以编码格式gbk存放数据时,要注意字符串类型的字段,要采用宽字符串nvarchar存放,前提是当你的应用程序是utf8编码,而数据库是gbk ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
- c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...
随机推荐
- 特效合集(原生JS代码)适合初学者
1.返回顶部(完全兼容各个浏览器,不含美化) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" & ...
- [工具开发] keepalived使用nagios监控脚本
最近在做开发和办公环境的高可用,采用的是keepalived:keepalived基于Linux内核支持的LVS,既能实现高可用,又能实现负载均衡,非常实用. keepalived监控服务状态时可以用 ...
- html__脚本之家
深入剖析Android的Volley库中的图片加载功能 Android图片加载缓存框架Glide Android程序开发ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不 ...
- 两个二进制数多少个位(bit)不同
class Solution { public: /** * 获得两个整形二进制表达位数不同的数量 * * @param m 整数m * @param n 整数n * @return 整型 */ in ...
- Maven依赖排除 禁止依赖传递 取消依赖的方法
大家都知道Maven的优点是依赖管理,特别是前期使用ANT的开发者都有很多感触.最近要开发一个java工程,定的要使用maven,会使用hadoop和hbase的客户端,而引入一个hadoop-cli ...
- Android中RelativeLayout各个属性的含义
android:layout_above="@id/xxx" --将控件置于给定ID控件之上android:layout_below="@id/xxx" - ...
- 2013年第四届蓝桥杯C/C++程序设计本科B组决赛
1.猜灯谜(枚举) 2.连续奇数和(等差数列) 3.空白格式化(去除空格) 4.高僧斗法(阶梯nim) 5.格子刷油漆(dp) 6.农场阳光 1.猜灯谜 A 村的元宵节灯会上有一迷题:请猜谜 * 请猜 ...
- 数据库的索引和填充因子fillfactor
索引分为聚簇索引和非聚簇索引 1.聚簇索引/聚集索引 聚簇索引的顺序就是数据的物理存储顺序,对于一个表来说,只有一个聚簇索引 create unique clustered index id_inde ...
- ArcGIS for Flex中引入google map作底图
上篇文章到在ArcGIS View中引入google map,这里讲ArcGIS for Flex中引入google map作底图. 同样道理,以google map作底图,需要编写继承自TiledM ...
- VBS定时关闭的弹窗
'类似msgbox '定时停留弹出框函数 Sub Print(text,timeout,title) Dim WshShell Set WshShell = CreateObject( ...