oracle数据库分区表按主键查询快还是按主键+分区条件查询快? 50

我有一张表,TEST,数据量很大,主键是ID(number),这张表按SQBM(varchar2)字段分区,以下三个SQL,哪个最快?还是都一样?1、select*fro... 我有一张表,TEST,数据量很大, 主键是ID(number),这张表按SQBM(varchar2)字段分区,以下三个SQL,哪个最快?还是都一样?
1、select * from TEST where ID=?
2、select * from TEST where ID=? and SQBM=?
3、select * from TEST where SQBM=? and ID=?
我用PL/SQL查询分析器看到效率一样,因为都是走主键的UNIQUEINDEX,但是公司的人说加上SQBM是有作用的,我迷糊了,请大虾指点,谢谢!
展开
 我来答
百度网友664454771
推荐于2018-04-05 · TA获得超过214个赞
知道小有建树答主
回答量:66
采纳率:0%
帮助的人:104万
展开全部
1.首先我想知道SQBM字段上是否存在INDEX,INDEX类型是global还是local partition。
如果SQBM上没有INDEX的话,则3个SQL的运行性能是一样的。都只会使用PK的index
2.如果表上存在(ID,SQBM)的组合INDEX,那么你添加SQBM条件是有作用的。
3.对于SQL2,SQL3 条件顺序颠倒是不会影响性能的。
追问
谢谢你,
1、SQBM字段上不存在INDEX,但是这张表按SQBM分区。
2、表上不存在(ID,SQBM)的组合INDEX。
3、这是oracle数据库,查询条件从右到左解析,也就是说,能够过滤大量数据的放最后比放前面效率高(但这里面有主键,我用PL\SQL查询分析器效率是一样的,但是公司的人说加上SQBM是有作用的,我想知道是我弄错了还是他弄错了)。
追答
如果表上没有任何INDEX,那么你加SQBM这个条件是有用的,可以由遍历所有分区,变为只遍历SQBM指定值的一个分区。
如果你SQBM上没有任何INDEX,而ID上存在主键,则3个SQL都会走主键,那么加上SQBM条件不会有任何性能提升。因为SQL根本就不会遍历表结构,而是去遍历索引结构。查到相关ID值的INDEX叶节点就会直接指向数据了。也就跟分区没什么关系了。

我不知道你数据库什么版本,使用CBO方式的话,where条件顺序是不会影响性能的。只和你的执行计划有关。
LewisDon
2012-06-22 · TA获得超过112个赞
知道答主
回答量:104
采纳率:0%
帮助的人:67.7万
展开全部
select * from TEST where ID=? and SQBM=?
这条语句快,SQL执行计划有条规则是语句执行是从右至左。通过先执行分区字段SQBM条件后,内容会分成几部分。这样就不会全盘扫描了。
更多追问追答
追问
你这是自己分析的呢还是实践得来的呢?我用程序试过,但是PC上哪数值总是变化,感觉不稳定,也不可靠
追答
这是理论。未实验,你可以测试下,向大家公布答案。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
supper_1234
2012-07-02 · TA获得超过2846个赞
知道答主
回答量:299
采纳率:100%
帮助的人:156万
展开全部
那个,你在where子句中单独使用sqbm就可使看出其区别了,分区表对性能最大的优化就是分区消除,你在id上简历了unique index,在加上数据量较小,肯定看不来效果
可以考虑建立locol unique index 如create unqiue index on (id,sqbm) local
然后使用2,3,就可以看出效果来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式