日期:2014-05-18  浏览次数:20433 次

跪求Sql Server2008海量数据的高速处理办法,1秒内实现模糊查询并排序
小弟现在做项目遇到个问题,我们需要对一个Text字段进行模糊查询,并且将以匹配的关键字多少进行排序。关键字匹配的越多越靠前。并且一秒内必须实现整个过程。目前我们已经实现了这个功能,但是时间很长,需要20秒。目前测试数据还只有2万条而已。

我把源码发给大家看看。

函数,实现查找某个关键字在某个字段出现的次数。这种方法感觉很不效率。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[getStrCount]
(@str VARCHAR(8000),
@substr VARCHAR(8000)
)
RETURNS INT
BEGIN
RETURN (LEN(@str)-LEN(REPLACE(@str,@substr,'')))/LEN(@substr)
END

查询的SQL语句:
SELECT [字段1] from [表] where [字段1] like '%阿凡达%' order by dbo.getStrCount( [字段1],'阿凡达') desc

------解决方案--------------------
并且一秒内必须实现整个过程?

这个要求怕是太高了,帮顶.
------解决方案--------------------
探讨
并且一秒内必须实现整个过程?

这个要求怕是太高了,帮顶.

------解决方案--------------------
这个问题太难做了,'%阿凡达%'这样的like还不能用索引。
------解决方案--------------------
全文索引
------解决方案--------------------
SQL code
--单独写个函数排序多余
SELECT [字段1] 
from [表] 
where [字段1] like '%阿凡达%' 
order by 
LEN([字段1])-LEN(REPLACE([字段1],'阿凡达',''))/LEN('阿凡达')
desc

------解决方案--------------------
仅依靠SQL Server,如果你实现了,我买你的方法。
------解决方案--------------------
你这个不是出现的次数,而是占用的长度大小排序吧

对表建立全文检索
------解决方案--------------------
探讨

全文索引

------解决方案--------------------
SQL SERVER2008 表分区(无限量的分区,不用盘柜,直接使用将内存虚拟成磁盘),也许可以在1s。
------解决方案--------------------
分区有什么用?全文索引是正解
------解决方案--------------------
全文索引。。。
------解决方案--------------------
like 1秒中能做到, 那真是牛人了
------解决方案--------------------
SQL code

SELECT [DomainUrl2]  
from [zong] 
where [DomainUrl2] like '%baidu%' 
order by 
(LEN([DomainUrl2])-LEN(REPLACE([DomainUrl2],'baidu','')))/LEN('baidu')
desc

------解决方案--------------------
like 是不使用索引的,还是试试全文索引吧
------解决方案--------------------
ding
------解决方案--------------------
用全文检索.很快的
------解决方案--------------------
只有一条路,全文索引
------解决方案--------------------
mark, study now,
------解决方案--------------------
用ISEARCH 淘宝也是用这个的,海量搜索不是单靠SQLSERVER2008的,要靠第三方来实现。
------解决方案--------------------
SQL好象没这样强大的实力哇.
------解决方案--------------------
建立字段的全文索引,使用

SELECT count(*)
FROM table
where contains(g_name,'"集成电路"')

千万记录内基本是秒杀
------解决方案--------------------
SQL code

like是模糊查詢,建議使用sql全文索引試試看,單憑目前需求,在1s內是無法實現的.

select ACCOUNT_ID from CQ_JB
where ACCOUNT_ID like '%28092%'
order by LEN(ACCOUNT_ID)-LEN(REPLACE(ACCOUNT_ID,'28092',''))/LEN(ACCOUNT_ID)
desc

sql全文索引2010-04-07 15:41基本知识
1. SQL Server7 的 DeskTop 版中没有全文本检索。
2. 一个表只能有一个全文本检索。
3. 被检索的表必须有单列的唯一索引。
4. 全文本的索引存储在文件系统中,而非数据库中。
5. 更新全文本索引的过程比常规索引要耗时,而且也不象常规索引那样可以由数据库系统立即更新。
6. 全文本索引包含在全文本目录( Full-Text Catalog )中,每个数据库可以包含一个或多个目录,但一个目录不能属于多个数据库。
7. 全文本检索只能在真正的表上创建,不能是视图,系统表,临时表。
8. 全文本检索会忽略某些噪音字( noise words),比如英文的 a,the,and,中文的'和','是'等等。
9. 如果在查询中包含 noise words ,就会引发错误,在应用程序中应去除这些 noise words。

启动全文本检索服务。
方法A:在企业管理器中打开 Support Services 文件夹,在 Full-Text Search 的右键菜单中选择 Start。
方法B:在 SQL Server Service Manager 的 Services 下拉列表中选择 Microsoft Search,并单击 Start/