ORACLE和SQL SERVER 分区索引的区别
2014-05-07 13:23
127 查看
ORACLE和SQL SERVER都可以建立与表分区不一样的索引分区。
ORACLE:要检索所有的数据,我们一般应该建立 全局索引分区(全局索引并不是一般人认为的只存在一个地方,实际上也是可以分区),但:
使用全局索引,索引键值必须和分区键值相同,这就是所谓的前缀索引。Oracle不支持非前缀的全局分区索引,如果需要建立非前缀分区索引,索引必须建成本地索引。
还有引用别人的说法:
假设有一个使用DATE列分区的大表。我们经常使用一个VARCHAR2列(VCOL)进行查询,但这个列并不是表的分区键值。
有两种可能的方法来访问VCOL列的数据,一是建立基于VCOL列的本地非前缀索引,
| |
------- -------
| | (10 more | |
Values: A.. Z.. partitions here) A.. Z..
另一种是建立基于VCOL列的全局索引,
| |
------- -------
| | (10 more | |
Values: A.. D.. partitions here) T.. Z..
可以看出,如果能够保证VCOL列值的唯一性,全局索引将会是最好的选择。如果VCOL列值不唯一,就需要在本地非前缀索引的并行查询和全局索引顺序查询以及高昂的维护代价之间做出选择。
(摘自:http://blog.itpub.net/14284241/viewspace-520876)
但建立本地索引分区,我实验过了,ORACLE有时候就是不走这些索引,非要全表扫描,即使你指定索引也不行!因为在这个表小分区内,特别是在多并行度下,它认为还不如全表扫描快!
SQL SERVER:和ORACLE相反,SQL可以指定和分区键不同的字段索引,即ORACLE说的非前缀全局索引。而且可以指定存放位置。SQL可以在分区函数上定义分区的键(只能一个),然后可以定义其他的字段索引。
SQL SERVER,所谓的分区,就是建立一个聚集索引,并指定索引字段和分区方案;你指定后,其他非聚集索引就可以随意指定其他分区方案了。你也可以建立2个聚集索引,一个是按分区键进行的聚集索引,一个是在分区内的聚集索引(但建立此聚集索引时,还是需要引用和外层一样的分区方案和分区字段,实际就是分区内的聚集索引)。
以上是个人愚见,仅供自己参考。
ORACLE:要检索所有的数据,我们一般应该建立 全局索引分区(全局索引并不是一般人认为的只存在一个地方,实际上也是可以分区),但:
使用全局索引,索引键值必须和分区键值相同,这就是所谓的前缀索引。Oracle不支持非前缀的全局分区索引,如果需要建立非前缀分区索引,索引必须建成本地索引。
还有引用别人的说法:
假设有一个使用DATE列分区的大表。我们经常使用一个VARCHAR2列(VCOL)进行查询,但这个列并不是表的分区键值。
有两种可能的方法来访问VCOL列的数据,一是建立基于VCOL列的本地非前缀索引,
| |
------- -------
| | (10 more | |
Values: A.. Z.. partitions here) A.. Z..
另一种是建立基于VCOL列的全局索引,
| |
------- -------
| | (10 more | |
Values: A.. D.. partitions here) T.. Z..
可以看出,如果能够保证VCOL列值的唯一性,全局索引将会是最好的选择。如果VCOL列值不唯一,就需要在本地非前缀索引的并行查询和全局索引顺序查询以及高昂的维护代价之间做出选择。
(摘自:http://blog.itpub.net/14284241/viewspace-520876)
但建立本地索引分区,我实验过了,ORACLE有时候就是不走这些索引,非要全表扫描,即使你指定索引也不行!因为在这个表小分区内,特别是在多并行度下,它认为还不如全表扫描快!
SQL SERVER:和ORACLE相反,SQL可以指定和分区键不同的字段索引,即ORACLE说的非前缀全局索引。而且可以指定存放位置。SQL可以在分区函数上定义分区的键(只能一个),然后可以定义其他的字段索引。
SQL SERVER,所谓的分区,就是建立一个聚集索引,并指定索引字段和分区方案;你指定后,其他非聚集索引就可以随意指定其他分区方案了。你也可以建立2个聚集索引,一个是按分区键进行的聚集索引,一个是在分区内的聚集索引(但建立此聚集索引时,还是需要引用和外层一样的分区方案和分区字段,实际就是分区内的聚集索引)。
以上是个人愚见,仅供自己参考。
相关文章推荐
- oracle中为什么重建分区索引(索引分区)? 重建分区索引和索引分区什么区别?
- Oracle 11g表分区与索引分区(《Oracle从入门到精通》读书笔记4)
- ORACLE 表分区与分区索引
- 深入学习Oracle分区表及分区索引
- oracle数据量大时候分区索引思路
- 关于 Oracle 分区索引的失效和重建
- SQL Server,MySQL,Oracle三者的区别
- Oracle 分区索引介绍和实例演示
- oracle patition 分区和索引
- SQL Server ->> 分区表上创建唯一分区索引
- sql server,mysql,oracle之间的区别
- Oracle表分区和索引分区汇总
- oracle和sql server取第一条记录的区别以及rownum详解
- Oracle与Mysql主键、索引及分页的区别小结
- ORACLE与SQL SERVER的区别
- PLSQL_Oracle分区表和相应的分区索引管理和使用(案例)(创建交易表等大表时进行分区提高效率)
- 创建空间数据分区表及分区索引步骤(oracle 10g 且关键字非字符型)
- Oracle写丢失错误恢复后的全局索引和分区索引的处理方式
- Sql Server 2005 实现Oracle 10g 的hash表分区功能
- Sql Server 2005 实现Oracle 10g 的hash表分区功能