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 的用法 » 查询处理 » 查询优化与执行 » 提高查询性能 » 索引

 

何时创建索引

没有任何简要的公式可以确定是否应创建索引。您必须考虑权衡索引检索的优点与该索引的维护开销。以下因素可帮助确定是否应创建索引:

  • 键和唯一列   SQL Anywhere 自动在主键、外键和唯一列上创建索引。您不应该在这些列创建附加的索引。组合键属于例外,它们有时可以通过附加的索引来得到改进。

    有关详细信息,请参见复合索引

  • 搜索频率   如果频繁地搜索某一特定列,则可以通过在该列上创建索引来改善性能。在很少进行搜索的列上创建索引可能没有意义。

  • 表大小   在包含许多行的相对较大的表上创建索引比在相对较小的表上创建索引更有好处。例如,对于只有 20 行的表,由于按顺序进行扫描所需的时间并不比进行索引查寻所需的时间长,因此在该表上创建索引没有多少好处。

  • 更新次数   每次在表中插入或删除行以及每次更新索引列时,都会更新索引。列上的索引会降低插入、更新和删除操作的速度。频繁更新的数据库的索引数应少于只读数据库的索引数。

  • 空间考虑   索引会占用数据库中的空间。如果数据库大小是您关注的主要问题,则应尽量少创建索引。

  • 数据分布   如果索引查寻返回的值太多,则索引查寻的开销会高于顺序扫描的开销。当 SQL Anywhere 发现这一情况时,它就不会使用索引。例如,SQL Anywhere 不会在只有两个值的列(如 SQL Anywhere 示例数据库中的 Employees.Sex)上使用索引。因此,不应在只有几个不同值的列上创建索引。

[索引顾问] 是一种工具,用于协助您为数据库选择一组适当的索引。请参见索引顾问

临时表

您可以在本地临时表和全局临时表上创建索引。如果临时表会很大,并且会按排序顺序或连接对其进行多次访问,则需要在临时表上创建索引。否则,查询的任何性能改善都可能会被创建和删除索引的开销所抵消。

有关详细信息,请参见使用索引