跪求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,'