Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » 性能提高、诊断和监控 » 关于提高性能的提示 » 与碎片有关的性能提示

 

减少索引碎片和分布偏差

索引用于加快对特定列的搜索速度,但如果对索引表执行了太多的 DELETE 操作,索引就会出现碎片(不紧凑)和分布偏差(不均衡)。

索引密度反映了索引页的平均丰满度。索引分布偏差反映了与平均密度的典型差值。进行选择性估计时,分布偏差量对于优化程序十分重要。

要确定数据库中是否存在其碎片或分布偏差水平无法接受的索引,可使用 [应用程序分析向导]。

也可以使用 sa_index_fragmentation 系统过程来查看索引碎片和分布偏差的程度。例如,以下语句调用 sa_index_density 系统过程来检查 Customers 表上的索引。

CALL sa_index_density( 'Customers' );
TableName TableId IndexName IndexID IndexType LeafPages Density Skew
Customers 718 CustomersKey 0 PKEY 1 0.127686 1.000000
Customers 718 IX_customer_name 1 NUI 1 0.789795 1.000000

SQL Anywhere 自动在主键上创建索引。请注意,在 sa_index_density 系统过程的结果中,这些索引的 IndexID 为 0。

当叶页数较低时,无需考虑密度和分布偏差值。密度和分布偏差值仅在叶页数较高时才变得重要。当叶页数较高时,较低的密度值表示存在碎片,而较高的分布偏差值则表示索引分布不均衡。二者都有可能是导致性能低下的因素。通过执行 REORGANIZE TABLE 语句即可解决这两个问题。

还可以使用 SQL Anywhere 插件中的 [碎片] 选项卡来查看与基表相关联的索引的索引碎片级别。

 另请参见