删除索引时,删除的是一个逻辑索引;但不会始终删除它所引用的物理索引。如果有其它逻辑索引引用同一物理索引,则不会删除该物理索引。了解这一点非常重要,特别是在希望通过删除索引释放磁盘空间时,或意在删除索引后以物理方式重新创建索引时。
要确定一个表的索引是否与任何其它索引共享一个物理索引,请在 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 值相同的索引共享同一物理索引。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |