期货交易自动化论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 20|回复: 0

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

[复制链接] |主动推送

285万

主题

285万

帖子

855万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8553710
发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|期货交易自动化论坛

GMT+8, 2025-8-25 18:25 , Processed in 0.083617 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表