问下Charindex与in的性能
and Employees.Level in (select value from Split(TransactorOptions.LevelEmployee, ','))
与 and charindex(Employees.Level,TransactorOptions.LevelEmployee) > 0
当我使用上一条语句作关联条件时,查询不到1秒
当我使用下面的语句作关联条件时,查询要1分半到2分钟
快的理由是什么,谁能告诉我下....
Level 是int型,可能为0-9的任何一个数字,LevelEmployee是字符,类似"1,3,9"这样。
------解决方案-------------------- in 是在结果集中查找。int 比较速度不言而喻。
charindex,需要把int 转换成char 然后在字符串中逐个对比查找,逐行逐字符 ,工作量大
------解决方案-------------------- 引用: SQL code?123and Employees.Level in (select value from Split(TransactorOptions.LevelEmployee, ','))与 and charindex(Employees.Level,TransactorOptions.LevelEmployee) > 0
当我使用上一条语句作关联条件时,查……
得看执行计划里面的差异,虽然直接表现为是这两个语句上的不同。
但涉及链接以及相关索引的使用,也相应的有很大影响。
LZ看下执行计划先...
------解决方案-------------------- 不推荐使用charindex() 很损失性能的 in一般都可以用exists替换掉 效率上有时候会不一样
------解决方案-------------------- 引用: 不推荐使用charindex() 很损失性能的 in一般都可以用exists替换掉 效率上有时候会不一样
仅在列有null 值 not逻辑 的时候会有大的性能提升。
参考http://blog.csdn.net/orchidcat/article/details/6267552
------解决方案-------------------- 引用: 引用:不推荐使用charindex() 很损失性能的 in一般都可以用exists替换掉 效率上有时候会不一样
仅在列有null 值 not逻辑 的时候会有大的性能提升。
参考http://blog.csdn.net/orchidcat/article/details/6267552
效率上有时候会不一样 ------解决方案-------------------- in 可以利用索引,而charindex不能。
------解决方案-------------------- 楼主不说这个level是不是设定的null 还是not null
------解决方案-------------------- charindex是要查询你的字符串内容,越大时间越长,另外,最好的解释应该从执行计划上去看,而不是单单的猜测
------解决方案-------------------- 先看看查询计划吧
------解决方案-------------------- 使用charindex对两个列进行运算, 使得索引没有使用的可能。
in操作中, split仅对后一个列操作, 对于employees.level字段索引仍有效。
------解决方案-------------------- 引用: 引用:
charindex是要查询你的字符串内容,越大时间越长,另外,最好的解释应该从执行计划上去看,而不是单单的猜测
这个是charindex的开销,我只截取了一部分: 从执行计划去分析两者有哪些区别,特别注意两者间占用百分比最大的那部分
------解决方案-------------------- 学习!