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

SQL Anywhere 11.0.1 (中文) » UltraLite - 数据库管理和参考 » 使用 UltraLite 数据库 » UltraLite 性能与优化

 

确定优化程序使用的访问方法

为查询优化选择索引时,UltraLite 优化程序使用复杂的优化策略。除了简单查询之外,您无法轻易预先确定优化程序用来优化查询性能的索引,或是否使用了某个索引。复杂程度增加时,选择的索引取决于查询所需的子句。在某些情况下,FOR READ ONLY 子句的出现可能导致优化程序选择直接表扫描,而不是选择能提供更好查询性能的索引。

优化查询时,优化程序将查看查询的要求,并检查是否存在可用来提高性能的任何索引。如果使用任何索引都无法提高性能,优化程序将不扫描索引,而是使用临时表或直接页扫描。因此,您可能需要对索引进行试验并经常检查生成的执行计划以确保:

  • 不是在维护优化程序不使用的索引。

  • 将要创建的临时表的数目降到最低。请参见管理临时表

对于复杂查询,更很难预知要使用哪个索引。例如,如果查询包含 WHERE 谓语,且除了 ORDER BY 子句以外还包含 GROUP BY 子句,则单独的一个索引可能不会满足此查询的搜索条件。因此,如果您创建了一个索引来满足 WHERE 谓语的选择性要求,您可能会发现优化程序实际上并未使用此索引。相反,优化程序可能使用一个为 ORDER BY 条件提供更好性能的索引,因为可能需要更多地处理此子句。

检查执行计划

可以通过适当的 API 调用以编程方式检查执行计划,也可以在 Interactive SQL 中的 [计划查看器] 上检查执行计划。

  • 如果未使用索引   执行计划以如下形式出现:
    scan(T)

  • 如果使用临时表   执行计划以如下形式出现:
    temp [scan(T)]

  • 如果使用索引   执行计划包含索引名:
    scan (T, index_name)