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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询处理 » 查询优化与执行 » 提高查询性能 » 索引

 

确定哪些逻辑索引共享一个物理索引

删除索引时,删除的是一个逻辑索引;但不会始终删除它所引用的物理索引。如果有其它逻辑索引引用同一物理索引,则不会删除该物理索引。了解这一点非常重要,特别是在希望通过删除索引释放磁盘空间时,或意在删除索引后以物理方式重新创建索引时。

要确定一个表的索引是否与任何其它索引共享一个物理索引,请在 Sybase Central 中选择该表,然后单击 [索引] 选项卡。注意该索引的 Phys.ID 值是否与列表中其它索引的 Phys.ID 值相同。如果 Phys.ID 值匹配,则说明这些索引共享同一物理索引。如果希望重新创建物理索引,可使用 ALTER INDEX ...REBUILD 语句。也可以删除所有索引,然后重新进行创建。

确定要共享哪些表中的物理索引

可随时通过执行类似下面的查询来获得要共享其物理索引的所有表的列表:

SELECT tab.table_name, idx.table_id, phys.phys_index_id, COUNT(*) 
 FROM SYSIDX idx JOIN SYSTAB tab ON (idx.table_id = tab.table_id)
 JOIN SYSPHYSIDX phys ON ( idx.phys_index_id  = phys.phys_index_id 
   AND idx.table_id = phys.table_id )
 GROUP BY tab.table_name, idx.table_id, phys.phys_index_id
   HAVING COUNT(*) > 1
ORDER BY tab.table_name;

以下是查询的示例结果集:

table_name table_id phys_index_id COUNT(*)
ISYSCHECK 57 0 2
ISYSCOLSTAT 50 0 2
ISYSFKEY 6 0 2
ISYSSOURCE 58 0 2
MAINLIST 94 0 3
MAINLIST 94 1 2

每个表的行数表示该表共享的物理索引数。在此示例中,除虚构表 MAINLIST 有两个共享物理索引外,其它所有表都只有一个共享物理索引。phys_index_id 值标识要共享的物理索引,COUNT 列中的值表明共享该物理索引的逻辑索引的数量。

还可以使用 Sybase Central 查看给定表中的哪些索引共享一个物理索引。为此,请在左侧窗格中选择表,并在右侧窗格中单击 [索引] 选项卡,然后查找与 Phys.ID 列的值相同的多个行。Phys.ID 值相同的索引共享同一物理索引。

另请参见