Select count(bidId) from BidInfo where startDate>DATEADD(day,-90,getDate()) and bidType=0 and charindex('11',v0_htmlText)这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字 符串及其它的运算上, 所以运用charindex函数也没什么大不了. 用这种方法也有好处, 那就是对%,|等在不能直接用like 查找到的字符中可以直接在这charindex中运用更多优化有请楼下
少了个>0Select count(bidId) from BidInfo where startDate>=DATEADD(day,-89,getDate()) and bidType=0 and charindex('11',v0_htmlText)>0这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字 符串及其它的运算上, 所以运用charindex函数也没什么大不了. 用这种方法也有好处, 那就是对%,|等在不能直接用like 查找到的字符中可以直接在这charindex中运用startDate>=DATEADD(day,-90,getDate()) 改成startDate>=DATEADD(day,-89,getDate()) 尽量使用“>=”,不要使用“>”。select field3,field4 from tb where field1>='sdf' 快 select field3,field4 from tb where field1>'sdf' 慢 因为前者可以迅速定位索引。
但是我有 20W条数据 v0_htmlText like '%11%' v0_htmlText 类型是ntext
加了 执行这样的sql语句大约要 40秒左右
(1) ntext -> nvarchar(4000) or nvarchar(max)(2)不要用like --> charindex(3)DATEADD(day,-90,getDate()) 用变量保存 (4)建立索引在那4列上
LIKE '%%' 用不到索引如果想提高速度的话可以加计算列CASE WHEN v0_htmlText like '%11%' THEN 1 ELSE 0 END然后在计算列上加索引。另外我是听说的,不要在WHERE后面加GETDATE,应该在前面定义一个参数等于GETDATE然后语句里用参数。最后,看一下执行计划。
符串及其它的运算上, 所以运用charindex函数也没什么大不了. 用这种方法也有好处, 那就是对%,|等在不能直接用like
查找到的字符中可以直接在这charindex中运用更多优化有请楼下
少了个>0Select count(bidId) from BidInfo where startDate>=DATEADD(day,-89,getDate()) and bidType=0 and charindex('11',v0_htmlText)>0这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字
符串及其它的运算上, 所以运用charindex函数也没什么大不了. 用这种方法也有好处, 那就是对%,|等在不能直接用like
查找到的字符中可以直接在这charindex中运用startDate>=DATEADD(day,-90,getDate()) 改成startDate>=DATEADD(day,-89,getDate())
尽量使用“>=”,不要使用“>”。select field3,field4 from tb where field1>='sdf' 快
select field3,field4 from tb where field1>'sdf' 慢
因为前者可以迅速定位索引。
用不到索引如果想提高速度的话可以加计算列CASE WHEN v0_htmlText like '%11%' THEN 1 ELSE 0 END然后在计算列上加索引。另外我是听说的,不要在WHERE后面加GETDATE,应该在前面定义一个参数等于GETDATE然后语句里用参数。最后,看一下执行计划。
(2) 在startDate、bidType和v0_htmlText上建立一个复合索引;
(3)like '%11%'是不能被优化的,要看看具体的情况,'11'前一般有几个字符,如果相对固定就分成几类进行查询