增加like,速度慢 select *from a where exists(select 1 from b where a.id=b.did and b.mdd like '%杭州%')只要增加了 b.mdd like '%杭州%',速度就很慢,不加like,速度就快,我知道,用exists之后,索引失效,但这个又一定得用到,请教有什么办法解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 like确有这种情况,等其它高手解答! 貌似造成索引失效的不是exists,而是like啊 http://blog.csdn.net/szstephenzhou/article/details/7774558 问题不是在于exists你改成下面的也是一样慢,select a.* from a join b on a.id=b.did where b.mdd like '%杭州%'主要是like 这个开销比较大,你的b表有多少数据?mdd 字段是什么类型的 列长多少 用charindex也能达到相同效果,但不知效率如何,LZ可以测试下 charindex效率一样的低下 要想效率高就尽量避免使用 like '%%'这样的查询。 select *from a where exists(select 1 from b where a.id=b.did and b.mdd like '杭州%')不知需求可不可以这样。 测试了一下,的确有这种情况。对比2个语句的执行计划,发现 加上like的是40%,不加like的是60%,而实际执行时间是 加上like 是 不加like的一倍左右。 看来执行计划的百分比高并不一定就效率低。 我感觉表内联接应该效率更高些,但是不知道执行时间具体多少。试试看吧:select a.* from ainner join b on a.id=b.did and b.mdd like '%杭州%' like 的使用,两遍都是模糊的话,即使这个列上有索引,也不会走索引扫描,你看看是否可以改成 '杭州%' 或者用函数索引 like是全文遍历搜索,很慢,放在join中 会速度减速一倍。不建议使用,换个思路解决你的问题吧select a.* from ainner join (select * from b where mdd like '%杭州%' )as b on a.id=b.did 问大家一个很平常用到的问题-查询重复数据 鱼老大我是你的fans,请进来指点一下 安装Sqlserver2000时提示配置服务器失败(在线急等高手指点) 想用ASP 生成 SQL 插入语句 如何使用游标,如何清除数据库日志 数据转移,SQL数据导出、导入错误(违反了primary key 数据不能导入) 高手帮忙! 这个问题大家是怎么做的。 SQL臨時表出錯:資料庫已經有一個名為 '#t1' 的物件。 <某制衣公司信息管理系统的数据库设计> 求树形结构选择的SQL语句 ssis包 删除目标表中的所有行,再导入
你改成下面的也是一样慢,select a.* from a join b on a.id=b.did where b.mdd like '%杭州%'主要是like 这个开销比较大,你的b表有多少数据?mdd 字段是什么类型的 列长多少
不知需求可不可以这样。
而实际执行时间是 加上like 是 不加like的一倍左右。 看来执行计划的百分比高并不一定就效率低。
试试看吧:
select a.* from a
inner join b on a.id=b.did
and b.mdd like '%杭州%'
inner join (select * from b where mdd like '%杭州%' )as b on a.id=b.did