• hint
    • 语法
    • 类型描述
      • use_hash
      • use_index
      • use_flag
    • 返回值
    • 示例
      • use_hash()
      • use_index()
      • use_flag()
      • use_option

    hint

    使用hint显式地控制执行方式或者执行计划。

    语法

    /+hint1 hint2 …/

    当希望控制某个语句时,只需要在这个语句结尾处增加 hint 即可。属于同一个语句的 hint 使用空格分隔。

    hint有多种不同类型:

    hint类型描述
    use_hash指定关联方式为哈希关联。
    use_index指定集合的扫描方式。
    use_flag设置标志位。
    use_option设置查询参数,主要用于 监控视图

    类型描述

    use_hash

    • 语法

    use_hash()

    • 参数描述

    • 支持语句

    select语句

    use_index

    • 语法

    use_index( )

    use_index( )

    • 参数描述

    参数名参数类型描述是否必填index_namestring索引名。是cl_namestring集合名。是

    • 支持语句

    select语句

    use_flag

    • 语法

    use_flag( )

    • 参数描述

    参数名参数类型描述是否必填flag_namestring | number标志位。不同语句的flag取值不同。是

    • 支持语句

    语句flag取值描述updateSQL_UPDATE_KEEP_SHARDINGKEY (0x00008000)更新条件中保留分区键字段。

    返回值

    示例

    • 数据库中集合 foo.bar1, foo.bar2, foo.bar3 的情况如下。
    1. // foo.bar1包含索引 "idx_bar1_a",该索引以 "a" 字段升序排序,其记录如下:
    2. { "a": 0 }
    3. { "a": 1 }
    4. { "a": 2 }
    5. { "a": 3 }
    6. { "a": 4 }
    7.  
    8. // foo.bar2包含索引 "idx_bar2_b",该索引以 "b" 字段升序排序,其记录如下:
    9. { "a": 1, "b": 1 }
    10. { "a": 2, "b": 1 }
    11. { "a": 3, "b": 2 }
    12. { "a": 4, "b": 2 }
    13. { "a": 5, "b": 2 }
    14.  
    15. // foo.bar1包含索引 "idx_bar3_c",该索引以 "c" 字段升序排序,其记录如下:
    16. // foo.bar3
    17. { "c": 0 }
    18. { "c": 1 }
    19. { "c": 2 }
    20. { "c": 3 }
    21. { "c": 4 }

    use_hash()

    • 指定关联方式为哈希关联。
    1. > db.exec("select t1.a, t2.b from foo.bar1 as t1 inner join foo.bar2 as t2 on t1.a = t2.b /*+use_hash()*/")
    2. { "a": 1, "b": 1 }
    3. { "a": 1, "b": 1 }
    4. { "a": 2, "b": 2 }
    5. { "a": 2, "b": 2 }
    6. { "a": 2, "b": 2 }
    7. Return 5 row(s).
    8. Takes 0.16533s.

    use_index()

    • 指定集合的扫描方式

    • 使用集合 foo.bar1 中索引 "idx_bar1_a" 进行扫描。

    1. > db.exec("select * from foo.bar1 where a = 1 /*+use_index(idx_bar1_a)*/")
    2. { "_id": { "$oid": "582ae8ea790ce72860000023" }, "a": 1 }
    3. Return 1 row(s).
    4. Takes 0.4843s.
    • 在关联中指定集合 foo.bar1 使用索引 "idx_bar1_a" 进行扫描。
    1. > db.exec("select t1.a, t2.b from foo.bar1 as t1 inner join foo.bar2 as t2 on t1.a = t2.b /*+use_index(t1, idx_bar1_a)*/")
    2. { "a": 1, "b": 1 }
    3. { "a": 1, "b": 1 }
    4. { "a": 2, "b": 2 }
    5. { "a": 2, "b": 2 }
    6. { "a": 2, "b": 2 }
    7. Return 5 row(s).
    8. Takes 0.13962s.
    • 在一个 select 语句中使用多个 hint。
    1. > db.exec("select t1.a, t2.b from foo.bar1 as t1 inner join foo.bar2 as t2 on t1.a = t2.b /*+use_index(t1, idx_bar1_a) use_index(t2, idx_bar2_b) use_hash()*/")
    2. { "a": 1, "b": 1 }
    3. { "a": 1, "b": 1 }
    4. { "a": 2, "b": 2 }
    5. { "a": 2, "b": 2 }
    6. { "a": 2, "b": 2 }
    7. Return 5 row(s).
    8. Takes 0.18535s.
    • 指定集合不使用索引。
    1. > db.exec("select * from foo.bar1 where a = 1 /*+use_index(NULL)*/")
    2. { "_id": { "$oid": "582ae8ea790ce72860000023" }, "a": 1 }
    3. Return 1 row(s).
    4. Takes 0.4843s.

    use_flag()

    • 指定更新记录时保留分区键。

    • 存在切分表foo.bar,落在两个分区组上,分区键为 { b: 1 }

    1. > db.execUpdate( "update foo.bar set b = 1 where age < 25 /*+use_flag(SQL_UPDATE_KEEP_SHARDINGKEY)*/" )
    2. (nofile):0 uncaught exception: -178
    3. Sharding key cannot be updated
    4. Takes 0.002696s.
    5. > db.execUpdate( "update foo.bar set b = 1 where age < 25 /*+use_flag(0x00008000)*/" )
    6. (nofile):0 uncaught exception: -178
    7. Sharding key cannot be updated
    8. Takes 0.002596s.

    use_option

    设置查询参数,主要用于 监控视图。

    • 语法

    use_option( , )

    • 支持参数

    语句描述Mode指定返回配置的模式。在 run 模式下,显示当前运行时配置信息,在 local 模式下,显示配置文件中配置信息。如 use_option(Mode,local)。默认为 run。Expand是否扩展显示用户未配置的配置项。如 use_option(Expand,false)。默认为 true。ShowError指定是否返回错误信息。在 show 模式下,显示错误信息,在 only 模式下,只显示错误信息,不显示其他快照信息,在 ignore 模式下,不显示错误信息。如 use_option(ShowError,only)。默认为 show。ShowErrorMode指定返回错误信息的格式。在 aggr 模式下,错误信息聚合为一条记录显示,在 flat 模式下,一个错误节点对应一条记录显示。如 use_option(ShowErrorMode,flat)。默认为 aggr。

    • 例子查看数据组 db1 中数据节点 20000 上的用户指定的配置信息
    1. > db.exec('select * from $SNAPSHOT_CONFIGS where GroupName = "db1" and ServiceName = "20000" /*+use_option(Mode, local) use_option(Expand, false)*/')
    2. {
    3. "NodeName": "hostname:20000",
    4. "dbpath": "/opt/test/20000/",
    5. "ServiceName": "20000",
    6. "diaglevel": 3,
    7. "role": "data",
    8. "catalogaddr": "hostname:30003,hostname:30013,hostname:30023",
    9. "sparsefile": "TRUE",
    10. "plancachelevel": 3,
    11. "businessname": "yyy",
    12. "clustername": "xxx"
    13. }

    查看数据组 db1 各个节点的配置信息,并且把错误信息显示为单独一条记录

    1. > db.exec('select * from $SNAPSHOT_CONFIGS where GroupName = "db1" /*+use_option(Mode, local) use_option(Expand, false) use_option(ShowError,show) use_option(ShowErrorMode,flat)*/')
    2. {
    3. "NodeName": "hostname:20000",
    4. "GroupName": "db1",
    5. "Flag": -79,
    6. "ErrInfo": {}
    7. }
    8. {
    9. "NodeName": "hostname:21000",
    10. "GroupName": "db1",
    11. "Flag": -79,
    12. "ErrInfo": {}
    13. }
    14. {
    15. "NodeName": "hostname:22000",
    16. "dbpath": "/opt/database/22000/",
    17. "ServiceName": "22000",
    18. "diaglevel": 5,
    19. "role": "data",
    20. "catalogaddr": "hostname:30003,hostname:30013,hostname:30023",
    21. "sparsefile": "TRUE",
    22. "plancachelevel": 3
    23. }