where 主键 in (1,2,3...7,8,9)and 主键 not in (4,5,6) ?? 怪怪的呢。 where 主键 in (1,2,3,7,8,9) 不就行了吗?
where patindex('%[1-37-9]%',主键)=1
1 where 主键 in (1,2,3...7,8,9) WHERE 主键 BETWEEN 1 AND 9where 主键 not in (1,2,3,7,8,9) 这个是可以优化的,不过要看你具体的环境。其实一个大的原则是尽可能的少用in, or等
同等条件下 BETWEEN 比 IN 更有效率 IN 要进行表扫描
如果數據很多的話,不妨這樣子 where key = 1 union where key = 2 ...雖然麻煩一點,但是速度快一點
可能有朋友误解了我的意思in (1,2,3...7,8,9)and 主键 not in (4,5,6) 一个in 和一个 not in 的(....)条件是不固定的,所以肯定没有办法采用楼上和2楼的方法 然后再多咨询一个问题,比如对 A 字段(int 无重复) B字段(int 有重复) 同时作了一个 PK_index 的索引 然后我在查询的时候 使用 where a=1 and b=1 这样能有效利用索引还是 用 where b=1 and a=1 利用比较有效率呢,以前听别人说 SQL语句执行where 条件是从两边往中间执行的 概念比较模糊谢谢各位赐教 :)
怪怪的呢。
where 主键 in (1,2,3,7,8,9) 不就行了吗?
WHERE 主键 BETWEEN 1 AND 9where 主键 not in (1,2,3,7,8,9) 这个是可以优化的,不过要看你具体的环境。其实一个大的原则是尽可能的少用in, or等
BETWEEN 比 IN 更有效率
IN 要进行表扫描
where key = 1
union
where key = 2
...雖然麻煩一點,但是速度快一點
一个in 和一个 not in 的(....)条件是不固定的,所以肯定没有办法采用楼上和2楼的方法 然后再多咨询一个问题,比如对 A 字段(int 无重复) B字段(int 有重复) 同时作了一个 PK_index 的索引
然后我在查询的时候 使用 where a=1 and b=1 这样能有效利用索引还是 用 where b=1 and a=1 利用比较有效率呢,以前听别人说 SQL语句执行where 条件是从两边往中间执行的 概念比较模糊谢谢各位赐教 :)