模糊查询根本用不上索引,不改变思路的话,加了也是白加。 有一个办法可以用到索引(假如ID上有索引),通过模糊查询获取ID的范围,最大值和最小值,然后更新这个范围内的值。 declare @MaxID int declare @MinID int select @MaxID=max(ID),@MinID=min(ID) from table where fld like '%this%' update table ser fld='centent' where id between @MinID and @MaxID
对于like '%key%'这种模糊查询,貌似分表是个不错的选择。
如果可以的话,模糊查询可以用charindex或者patiindex函数来代替,效率要高点 例如 select * from table where charindex(key,fld)>0
我试了一下用分页的代码模糊查询速度还可以,但是输入一个数据库没有的记录查询就超时了,语句是这样的: SELECT tt FROM (SELECT ROW_NUMBER() OVER (order by id) AS pos,tm FROM table where tt like '%"+textBox1.Text +"%') AS sp WHERE pos BETWEEN "+1+" AND "+20;
你也太小看SqlServer了,现在的2008R2,可不比Oracle差多少,
千万级的数据,SqlServer也是胜任有余,关键是你的结构是怎么设计的。要从你的业务逻辑入手哦。
有一个办法可以用到索引(假如ID上有索引),通过模糊查询获取ID的范围,最大值和最小值,然后更新这个范围内的值。
declare @MaxID int
declare @MinID int
select @MaxID=max(ID),@MinID=min(ID) from table where fld like '%this%'
update table ser fld='centent' where id between @MinID and @MaxID
例如
select * from table where charindex(key,fld)>0
SELECT tt FROM (SELECT ROW_NUMBER() OVER (order by id) AS pos,tm FROM table where tt like '%"+textBox1.Text +"%') AS sp WHERE pos BETWEEN "+1+" AND "+20;