|
假如表XXXX 中有a这个字段,a varchar(21)而且是索引,如果我select count(*) from XXXX where substr(a,1,6) ='abcdef' 这样写是不是会对XXXX表进行全表扫描,切用不上这个索引,这样写会速度非常慢,如果这么写 select count(*) from XXXX where a like 'abcdef%' 这么写可以用到索引提高查询数度,XXXX表是页锁,请牛人回到哦
3833020 发表于 2012-1-11 13:16

页锁?sybase?
sybase,oracle ,informix,db2他们的原理应该都差不多把,可以理解成sybase
老胡觉得是因为函数不要写在where子句中,反复调用,大大影响到了效率
其他的锁的因素,应不是关键原因
正常来说,
substr(a,1,6) ='abcdef' 是不会用到索引的 除非建函数索引,但使用时必须写法和函数的建法一致
XXXX where a like 'abcdef%' 这个是会用到索引的。
页锁,oracle没有页锁的概念,db2不清楚有没有。
检索的时候oracle在表上有一个事物锁,在行上有共享锁--好像是这样的
db2的话,在检索的过程中是会阻塞其他session的更新,删除的,而且如果锁数量超过超过一定比例会锁升级。
还要看你这个sql的使用高频率和表中的数据量的,数据量不大,使用频率低可以考虑从设计上进行解决
索引的建立是和查询应用相关的,如果频率不高,还是不建议建那么多索引的,索引多了,你更新和插入的速度就慢下来
老胡的个人建议,这个表上如果超过了5个索引,就不要再建立索引了
如果这个字段使用频率太高,或者考虑分段,或者考虑库表分拆 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|