何时应该将非聚集索引存储在单独的文件组中?

Mic*_*eth 16 index sql-server

我听说将索引存储在不同的文件组和驱动器上可以提高数据库的性能,因为驱动器不必在索引和索引引用的数据之间来回切换。我也听说这是一个神话。

何时将非聚集索引存储在单独的文件组和驱动器上是可取的?哪些性能/分析器证据会导致我得出该结论?硬件是否在决策中起作用(是否在单个驱动器上使用 RAID/SAN)?

Sta*_*hns 10

数据库系统中最慢的部分是磁盘驱动器。消除磁盘级别的瓶颈将提高性能。在查找数据和使用索引时,首先查找索引,然后获取相应的数据。如果索引和数据都在同一个磁盘上,那么就会发生一些争用。然而,如果数据位于不同的(物理)磁盘上,则会发生更快的 IO,从而提高性能。需要注意的主要部分是数据或索引位于单独的物理磁盘或 LUN 上。

如果您需要从系统中获得更好的性能,则可以使用这种方案,前提是您有磁盘。对于您的性能计数器,您可以使用Physical Disk – Avg. Disk sec/Read, Physical Disk – Avg. Disk sec/Write, Physical Disk – Disk Reads/sec,Physical Disk – Disk Writes/sec对您的更改进行前后比较。


Jac*_*las 5

在不同的驱动器之间分散同步 I/O 肯定会提高性能——这不是神话。一个神话是,做两次会再次提高性能。

如果您是SAME,那么将您的数组分成两个分区并将索引放在一个分区上并将表放在另一个分区上是浪费时间。


San*_*ddy 5

将数据中的索引分离到单独的文件组 = 性能改进是很有争议的。如果您拥有支持它的底层硬件,则“可能”会发生性能改进,但仅仅因为将它们分离到不同的文件组并不能提高性能。因此,测量性能提升也不容易。

参考:http : //weblogs.sqlteam.com/dang/archive/2008/08/01/Are-you-a-DBA-Monkey.aspx

你应该先问这个问题。为什么需要这样做?

  1. 您是否希望通过不包含索引来提高备份的性能?
  2. 您是否希望提高对这些索引的读写性能?
  3. 您这样做是为了更好地管理底层对象的放置吗?
  4. 您是否拥有对性能有不同需求的大量数据?
  5. 您是否希望将 SSD 用于非聚集索引以提高性能等...

我看着这个任务来支持上面列表中#5 的需求,这对我来说似乎是一个很好的建议,尽管我们还没有采取行动。

请注意,此决定并不容易做出,您需要弄清楚您要尝试做什么并确保您拥有支持的硬件。除非您已经很好地测试并且看到性能显着提升,否则不要进行这样的更改,否则您可能会放弃这个想法。如果您希望通过简单地将索引分离到单独的文件组来提高性能,那么这是不值得的。