日期:2014-05-17  浏览次数:20511 次

跪求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还不能用索引。
------解决方案--------------------
全文索引
------解决方案--------------------
--单独写个函数排序多余
SELECT [字段1] 
from [表] 
where [字段1] like '%阿凡达%' 
order by 
LEN([字段1])-LEN(REPLACE([字段1],'阿凡达',''))/LEN('阿凡达')
desc

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

对表建立全文检索
------解决方案--------------------
引用:
全文索引


x


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

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

我的数据量是5万2~~一秒内就出来了
你这个是出现的次数吧?到底排序依据是什么?
另外你写成函数放在order后面或许是速度慢的原因...

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

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

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

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

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