RPK*_*RPK 6 mysql innodb postgresql oracle sql-server
这个问题对于我使用的所有数据库产品都很常见,即。SQL Server、MySQL、Oracle 和 PostgreSQL。
我创建了一个新的数据库,目前表中没有记录。我已经在查询中经常需要的所有这些表列上创建了索引。我想知道当我继续在表中添加记录时,索引是如何在物理上(集群)和逻辑上(非集群)更新的?索引是自动更新还是我需要不时手动更新索引?
索引自动更新的关于什么是存储在其中(被索引行的列值)。
然而,一些 DBMS 需要对其进行定期维护(也称为“重建”)以优化索引值的存储。
旧版本的 Microsoft SQL Server 需要定期重建索引以保持高效。但我不知道新版本是否仍然如此(2005,2008)
无需在 Oracle 中重新创建索引。
PostgreSQL 的(自动)真空进程应该负责回收空间,但它们有时(虽然很少)也需要重建。
小智 4
索引本身中的值将自动更新。我只能代表 SQL Server,但由于发生碎片,索引通常需要重建或重新组织 - 特别是如果它位于定期更新的表上。可以通过 sys.dm_db_index_physical_stats DMV 监控索引碎片:
http://msdn.microsoft.com/en-us/library/ms188917.aspx
最好的策略通常是使用一个脚本来查找超过一定碎片级别的索引,然后根据该值重建或重新组织。我知道很多人都使用 Ola Hallengren 的脚本:
在我们的生产数据库中,我们每晚运行与此类似的脚本来检查碎片(尽管这可能有点过头了)。
| 归档时间: |
|
| 查看次数: |
4428 次 |
| 最近记录: |