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 的用法 » 创建数据库 » 使用数据库对象 » 使用索引

 

使用聚簇索引

尽管对于那些搜索指定范围键值的语句而言,使用索引可以极大提高性能,但在索引中相继出现的两行在数据库中却不必出现在同一个表页上。

通过声明聚簇索引可以进一步提高大规模索引扫描的性能。使用聚簇索引会提高相邻索引条目中的两行出现在数据库中同一页上的可能性。这样就减少了表页需要被读到缓冲池中的次数,从而提高了性能。

如果存在具有聚簇特性的索引,数据库服务器在存储表行时会尝试使用与表行在聚簇索引中的顺序大致相同的顺序。但是,尽管数据库服务器会尝试保持键顺序,但聚簇只是大致的,并不能保证完全的聚簇。因此,数据库服务器不能按聚簇索引键顺序来顺序地扫描表并检索所有行。要确保表中的行按排序顺序返回,需要一个访问计划,要么通过索引来访问行,要么执行物理排序。

优化程序可以利用具有聚簇属性的索引,它会修改索引检索的预期开销,通过匹配或相邻索引键值将表行的预期物理相邻性考虑进去。

随着时间的推移,给定表中有越来越多的行被插入或更新,表的聚簇量可能会随之减少。数据库服务器自动跟踪 ISYSPHYSIDX 系统表中各聚簇索引的聚簇量。如果数据库服务器检测到表中的行很大程度上未聚簇,优化程序会调整其预期索引检索开销。

决定使表的一个索引聚簇时需要考虑预期查询负荷。通常需要进行一些实验。通常,当指定查询具备以下条件时,数据库服务器可以使用聚簇索引提高性能:

  • 回应查询所需的很多表页还不在内存中。当表页已在内存中时,服务器不需要读取这些页,此类聚簇不相关。

  • 可通过执行预计会返回无关紧要的行数的索引检索来回应查询。例如,对于简单主键搜索,聚簇通常不相关。

  • 与执行仅索引检索相反,数据库服务器需要实际读取表页。