索引与分区


20

为什么不能仅通过索引来实现性能改进,所以其他技术(如表分区)变得必要吗?这个问题仅与性能有关,当然可以将不同的分区放入不同的表空间中,这还会产生其他索引无法实现的效果。

或者换句话说,仅在性能方面是明智的:索引是否可以实现与表分区相同的性能改进?


2
与其将索引和分区看作是一种性能提升的解决方案,不应该将两者都视为可以单独使用或结合使用以实现数据库性能提升的工具。
ScottCher 2011年

Answers:


18

不,分区允许将某些表扫描限制为特定分区。如果返回的数据量超过表数据的2%到4%,则索引通常无用。如果您的选择条件允许查询被本地化到特定分区,则无需扫描其他分区。

优化程序可能会选择对某些分区使用表扫描,而对其他分区使用索引。我还没有看到任何表明正在发生的解释计划。

如果您有很多历史数据,则可以构造对当前数据的查询,以将考虑的分区限制为包含当前数据的分区。


3
我正在创建分区。确保为每个分区选择正确的存储设备。将实际的数据分区放置在高速驱动器上,将其放在较旧的驱动器上。
Nico

7

直接回答您的最后一个问题:不,我不认为它们是等效的。想想一个非常大的表(数十GB),该表需要搜索一天的数据。使用每日分区,您将只扫描当天的数据,而没有任何空间损失,而索引是一个单独的结构,可能无法容纳足够的信息(并且还会占用空间,这在谈论大型数据库时会引起关注)或可能不会足够的选择性。

无论如何,索引和分区都无法在使用和性能上争夺相同的好处。您应该在数据库中找到余额。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.