单选:创建Outline的语句如下:CREATE OUTLINE ot1 ON "SELECT/*+ index(t1 ix1)*/ C1,C2,C3 FROM T1 WHERE C1=1 ORDER BY 2";以下哪个语句可以命中该Outline?

创建Outline的语句如下:CREATE OUTLINE ot1 ON “SELECT/+ index(t1 ix1)/ C1,C2,C3 FROM T1 WHERE C1=1 ORDER BY 2”;以下哪个语句可以命中该Outline?

A. SELECT C1,C2,C3 FROM T1 WHERE C1=1 ORDER BY 1

B. SELECT C2,C1,C3 FROM T1 WHERE C1=2 ORDER BY 2

C. SELECT C2,C1,C3 FROM T1 WHERE C1=1 ORDER BY 1

D. SELECT C1,C2,C3 FROM T1 WHERE C1=2 ORDER BY 2

Outline 匹配的核心规则:

  1. SQL 文本必须完全一致 :Outline 是基于 SQL 文本的精确匹配(除了字面量常量可以被参数化/忽略外,SQL 的结构、关键字、列的顺序、表名等必须完全相同)。
  2. 常量参数化WHERE C1=1 中的 1ORDER BY 2 中的 2 是常量。在匹配 Outline 时,这些常量通常会被忽略(即 C1=1C1=2 视为相同,ORDER BY 2ORDER BY 1 视为相同)。
  3. 列顺序不能变SELECT C1,C2,C3SELECT C2,C1,C3 的文本结构不同,无法命中同一个 Outline。

分析给定的 Outline 定义:
SELECT/+ index(t1 ix1)/ C1,C2,C3 FROM T1 WHERE C1=1 ORDER BY 2

  • 提取列:C1, C2, C3 (顺序固定)
  • 表名:T1
  • 过滤条件:C1=常量
  • 排序:ORDER BY 常量

逐一分析选项:

  • A. SELECT C1,C2,C3 FROM T1 WHERE C1=1 ORDER BY 1

    • 列顺序:C1,C2,C3 (匹配)
    • 过滤条件:C1=1 (常量匹配)
    • 排序:ORDER BY 1 (常量匹配)
    • 结论:可以命中。
  • B. SELECT C2,C1,C3 FROM T1 WHERE C1=2 ORDER BY 2

    • 列顺序:C2,C1,C3不匹配 ,列顺序变了)
    • 结论:无法命中。
  • C. SELECT C2,C1,C3 FROM T1 WHERE C1=1 ORDER BY 1

    • 列顺序:C2,C1,C3不匹配 ,列顺序变了)
    • 结论:无法命中。
  • D. SELECT C1,C2,C3 FROM T1 WHERE C1=2 ORDER BY 2

    • 列顺序:C1,C2,C3 (匹配)
    • 过滤条件:C1=2 (常量匹配)
    • 排序:ORDER BY 2 (常量匹配)
    • 结论:可以命中。

总结:
选项 AD 都可以命中该 Outline。

正确答案:A、D

1 个赞

记得采纳一下哦

1 个赞

单选题