是否应该将表和索引建立在不同的表空间上?
在某些参考书或者是在网上,经常可以看到如下的描述:
“Oracle强烈建议,任何一个应用程序的库表至少需要创建两个表空间,其中之一用于存储表数据,而另一个用于存储表索引数据。因为如果将表数据和索引数据放在一起,表数据的I/O操作和索引的I/O操作将产生影响系统性能的I/O竞争,降低系统的响应效率。将表数据和索引数据存放在不同的表空间中(如一个为APP_DATA,另一个为APP_IDX),并在物理层面将这两个表空间的数据文件放在不同的物理磁盘上,就可以避免这种竞争了。”
上面的这句话是正确的,重点在于这句“并在物理层面将这两个表空间的数据文件放在不同的物理磁盘上”。因为如果是一块磁盘的话,建立两个表空间,因为物理上还是在竞争同一块磁盘,所以没有从根本上解决I/O竞争的问题。另外Oracle提倡这种做法,有两个目的,其一是如果在两个物理磁盘上创建不同的表空间来规避I/O竞争问题,其二更多的是为了管理的方便,这样在导入、导出以及设置备份策略的时候,就可以有选择性的只备份数据部分等。