数据库服务器使用访问方法来访问表。服务器可以通过全面表扫描顺序读取表,或使用表的任一索引。访问方法伪指令会影响访问方法。
下表列出将影响访问方法的伪指令:
访问方法伪指令 | 描述 |
---|---|
INDEX | 指示优化器使用指定的索引访问表。如果该伪指令列出的索引不至一个,那么优化器将选择成本最低的索引。 |
AVOID_INDEX | 指示优化器不使用列出的任何索引。您可以将该伪指令与 AVOID_FULL 伪指令一起使用。 |
INDEX_SJ | 使用指定的索引或在索引列表中选择成本最低的索引来强制自连接路径,即使数据分发统计信息不用于索引的前导索引键列。
有关索引自连接路径的信息,请参阅包含索引自连接路径的查询计划。 |
AVOID_INDEX_SJ | 指示优化器不对指定的索引使用索引自连接路径。 |
FULL | 指示优化器执行全面表扫描。 |
AVOID_FULL | 指示优化器不要对列出的表执行全面表扫描。您可以将该伪指令与 AVOID_INDEX 伪指令一起使用。 |
INDEX_ALL 或 MULTI_INDEX | 通过对多索引扫描使用指定的索引来访问表。
INDEX_ALL 和 MULTI_INDEX 关键字是同义词。 |
AVOID_MULTI_INDEX | 指示优化器不要考虑对指定的表使用多索引扫描路径。 |
在某些情况下,强制指定一种访问方法可以更改优化器所选择的连接方法。例如,如果您使用 AVOID_INDEX 伪指令排除了某个索引的使用,那么优化器可能选择散列连接而不是嵌套循环连接。
如果满足所有这些条件,那么优化器将估计索引自连接路径的成本,并将该成本与备选访问方法的成本进行比较。然后,优化器将为表选择最佳访问方法。有关访问方法伪指令及其一些用法示例的更多信息,请参阅 GBase 8s SQL 指南:语法。