“oracle怎么知道把新数据放在哪个分区?”
从文档
Oracle 数据库使用线性散列算法,为了防止数据在特定分区内聚集,您应该将分区数定义为 2 的幂(例如,2、4、8)。
至于你的另一个问题...
“当我查询数据时,似乎没有办法避免碰到多个分区?”
如果您正在搜索单个客户 ID,那么没有。Oracle 的散列算法是一致的,因此具有相同分区键的记录最终会出现在同一个分区中(显然)。但是,如果您正在搜索上个月的所有新客户,那么可以。Oracle 的散列算法将努力均匀分布记录,以便将最新记录分布在整个表中。
所以真正的问题是,我们为什么要选择对表进行分区?性能通常是最不引人注目的分区理由。更好的理由包括
- 可用性每个分区可以驻留在不同的表空间上。因此,表空间的问题将取出表数据的一部分而不是整个数据。
- 管理分区提供了一种将整个表作业拆分为清晰批次的机制。分区交换可以更轻松地批量加载数据。
至于性能,记录的物理协同定位可以加快一些查询 - 那些通过定义的键范围搜索记录的查询。但是,任何与查询粒度不匹配的查询都不会比非分区表执行得更快(甚至可能执行得更慢)。
哈希分区不太可能提供性能优势,正是因为它在整个表中打乱了键。它将提供分区的可用性和可管理性优势(但显然不是特别适合分区交换)。