请教牛人一个技术问题,牛人回答哦 - 金融行业 - ITPUB论坛-专业的IT技术社区

[复制链接]
10 0
wangjia 发表于 2022-9-11 08:10:00 | 只看该作者 |阅读模式 打印 上一主题 下一主题
假如表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
收藏
收藏0
转播
转播
分享
分享
分享
淘帖0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子2847023

发布主题
阅读排行更多+

Powered by 顺水鱼MT4外汇EA网! X3.2© 2001-2017 顺水MT4外汇EA公司.( 陕ICP备17014341号-1