如何提高拥有上百万条数据的查询速度(300分)

  • 主题发起人 主题发起人 吴晓勇
  • 开始时间 开始时间

吴晓勇

Unregistered / Unconfirmed
GUEST, unregistred user!
现在要在有上百万条数据的表中对某字符串字段进行模糊搜索,如何才能提高查询速度?
1、如果非要使用like '%example%',如何提高查询速度?
2、如果有替换like语句的方法,怎样做?
使用的数据库为sql server2000,我曾使用一个类似搜索程序,它能在1秒内查出结果。
 
在Sql服务器做一个全文件索引!
 
用Ado进行查询,在查询的同时不要这样写like '%asddd%' 在参数直接写成 like :agment
在写程序的时候,再写 agment:=edit1.text+'%',如果可以请在ADoQuery里面加上索引,
这样很快。
我试过的效果不错,大约600万条记录,查询的速度大约是3~~~5秒。不信晴试试。
代码:
 
可以用词库来提高检索服务,索引必不可少
 
你所见到程序也可能是那种非结构化的数据库查询,也称作海量数据库查询,它是一种文件型
数据库,对于那些开发全文检索系统、文献管理系统很有用,你可到这www.ibass.com.cn
这个网站去看看
 
炙天使:
按你前面的说法,你只对关键字的后面部分进行模糊匹配,而无法检索出like '%adcdd'
这样的纪录。
 
我做过类似的东东,具体地说,是在一个工作日志系统中根据用户输入的关键字查找用户
自己记录的日志内容。如查找包含"塔利班"的日志内容。
当然,sql使用了like:like "%塔利班%"
但我只返回查找到的第一条,而且由于我是在日志中查,所以还是用了日期作为条件,这样
可以控制查找下一条。
我使用的是oracle。
 
forest gun:
这样做的速度是会快一些,但是我需要返回所有结果。
 
用contains, 前提是建立全文索引

全文索引
如果正在对不到一百万行的表进行全文索引,那么几乎不需要进行性能优化。如果对大型
SQL Server 表(其中包含创建大型全文目录的上百万行)进行全文索引,那么这会持续
进行大量的读取和写入活动,因此必须配置 SQL Server 和全文目录,以通过跨多个硬
盘驱动器进行负载平衡来获得最优磁盘 I/O 性能。同时还需要考虑硬件配置、Microsoft
Windows® 2000 或 Windows NT® 4.0 系统配置、SQL Server 2000 配置、全文目录和数
据库文件的实际位置。
 
USE pubs
GO
SELECT title_id, title, notes
FROM titles
WHERE CONTAINS(notes, 'business')
GO

请查SQL Server2000的联机丛书
搜索关键词:  全文检索建议
全文检索
contains


最近一期的电脑报上登了使用SQL Server2000全文索引的办法。
 
htw:
我也曾经试过建立全文索引,但是总是无法建立全文目录,包错信息:“目录名无效”,
请问:
1、怎样正确创建全文目录?
2、建立全文索引对系统资源有什么要求(例如硬盘空间)?
 
电脑报第40期(2001年10月8日)软件世界版中有篇文章,值得一看
《SQL Server中全文检索的使用》

另外,请仔细阅读SQL server的联机丛书, 搜索我前面给的关键词,
http://dirh.home.chinaren.com/study/asp/st00019.htm
http://dirh.home.chinaren.com/study/asp/st00022.htm
http://www.tech521.com/show_data.asp?tid=240
http://www.chinaasp.com/sql/faq/
 
htw:
我使用了全文索引,发现全文搜索并不能达到like '%tes%'相同的效果,它好像只能
对词组和短语有效,对于其他字符串要么查不到要么报错,这是怎么回事?
 
1。升级主机,硬件(如果是单位的话)
2。LIKE ‘%x%’,如果X为有限的几个值的话,我有好办法(以增加数据冗余为代价)
 
如果是用ADO的话,可以用异步方法,先检索出一部分(如100条),
其它的在用户需要时再传到客户端。
 
除了在数据库中作“手脚”外,在程序中建议使用Fillter,使用Like每次都要访问数据库,
使用Fillter是操作本地内存数据,比LIke效率要高,这只是其中的一面。
 
我认为renzhm说的使用Fillter不是好主意,数据集部件会把所有记录都读入本地,然后才Fileter,
对于几百万条的数据库表来说,吓死人呀。

对于大数据库的模糊查询,从数据库端着手才是现实的。
 
后退
顶部