但是我在sql2k的查询分析器里对某个表分析了一下,clustered index scand 的成本都是一样的8x
但是column is not null and column<>"" 这个的select 成本要高于len(column)>0的成本
而且预计行数也多很多
用count(*)算了一下,结果一样,而且时间都只显示为1秒
那数据量很大的情况下那个条件比较好?
10 个解决方案
#1
column is not null and column <> ""
这个快
这个快
#2
其实两种写法都可能引起表级扫描吧
似乎强制索引才行
SELECT * FROM T1 (INDEX = IX_ProcessID) where ...
似乎强制索引才行
SELECT * FROM T1 (INDEX = IX_ProcessID) where ...
#3
不如在设计时加缺省值,这样可以避免is not null 及<> 的操作,
#4
我认为还是is null is not null快
#5
避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操作符,因为这会使系统无法使用索引,而只能直接搜索表中的数据
#6
而对where 中的字段用函数操作也会这样
#7
column is not null and column <> "" 这个 快一点
这个可以用到索引
len(column)> 0 使用了函数,使用不了索引
这个可以用到索引
len(column)> 0 使用了函数,使用不了索引
#8
其实速度差别不大吧。如果可读性,我认为下边的更好些。
isnull(字段名,'')<>''
isnull(字段名,'')<>''
#9
当然了,对楼主的问题,我认为用函数一定会比不用函数慢些吧。
#10
is null或者is not null
这样判断效率高点吧```
这样判断效率高点吧```
#1
column is not null and column <> ""
这个快
这个快
#2
其实两种写法都可能引起表级扫描吧
似乎强制索引才行
SELECT * FROM T1 (INDEX = IX_ProcessID) where ...
似乎强制索引才行
SELECT * FROM T1 (INDEX = IX_ProcessID) where ...
#3
不如在设计时加缺省值,这样可以避免is not null 及<> 的操作,
#4
我认为还是is null is not null快
#5
避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操作符,因为这会使系统无法使用索引,而只能直接搜索表中的数据
#6
而对where 中的字段用函数操作也会这样
#7
column is not null and column <> "" 这个 快一点
这个可以用到索引
len(column)> 0 使用了函数,使用不了索引
这个可以用到索引
len(column)> 0 使用了函数,使用不了索引
#8
其实速度差别不大吧。如果可读性,我认为下边的更好些。
isnull(字段名,'')<>''
isnull(字段名,'')<>''
#9
当然了,对楼主的问题,我认为用函数一定会比不用函数慢些吧。
#10
is null或者is not null
这样判断效率高点吧```
这样判断效率高点吧```