oracle数据库分区表按主键查询快还是按主键+分区条件查询快?
我有一张表,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是有作用的,我迷糊了,请大虾指点,谢谢!----------------------------------------->>
网友采纳
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条件顺序是不会影响性能的。只和你的执行计划有关。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29119536/viewspace-1227267/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29119536/viewspace-1227267/