访问计划的搜索过程

    当 SdbQuery.explain() 的 Search 选项为 true 时,将展示以下信息(Evaluate 选项为 true 时显示 Constants 和 Input 字段):

    SearchPaths 数组的每项表示一个搜索过的访问计划,将展示以下信息:

    字段名类型描述
    ScanType字符串访问计划的扫描方式1. "tbscan" 表示全表扫描2. "ixscan" 表示索引扫描
    IndexName字符串访问计划使用的索引的名称全表扫描时为 ""
    UseExtSort布尔型访问计划是否使用非索引排序
    Direction整型访问计划使用索引时的扫描方向1 表示正向扫描索引-1 表示反向扫描索引
    QueryBSON 对象访问计划解析后的用户查询条件
    IXBoundBSON 对象访问计划使用索引的查找范围表扫描为 null
    NeedMatch布尔型访问计划获取记录时是否需要根据匹配符进行过滤NeedMatch 为 false 的情况有:1. 没有查询条件2. 查询条件可以被索引覆盖
    IXEstFromStat布尔型是否使用索引的统计信息进行估算(索引扫描时显示)
    IXStatTime时间戳使用的索引的统计信息的生成时间(索引扫描时显示)
    Score浮点型评分:1. 索引扫描为索引的选择率(< 0.1时为候选计划)2. 全表扫描为匹配符的选择率
    IsCandidate布尔型是否候选访问计划,不是候选计划不进行估算1. 索引扫描选择率 < 0.12. 索引扫描完全匹配排序字段3. 全表扫描
    IsUsed布尔型是否最终选择的访问计划
    TotalCost浮点型估算的代价(内部表示 单位约为 1/2000000 秒)该代价不包括选择符、skip() 和 limit() 的影响
    ScanNodeBSON 对象TBSCAN 的推演公式 或 Evaluate 选项为 true 时显示
    SortNodeBSON 对象SORT 的推演公式Evaluate 选项为 true 且需要进行排序时显示

    Note:

    示例

    1. {
    2. ...,
    3. "Search": {
    4. "Options": {
    5. "sortbuf": 256,
    6. "optcostthreshold": 20
    7. },
    8. "Constants": {
    9. "RandomReadIOCostUnit": 10,
    10. "SeqReadIOCostUnit": 1,
    11. "SeqWrtIOCostUnit": 2,
    12. "PageUnit": 4096,
    13. "RecExtractCPUCost": 4,
    14. "OptrCPUCost": 1,
    15. "IOCPURate": 2000,
    16. "TBScanStartCost": 0,
    17. "IXScanStartCost": 0
    18. },
    19. "Input": {
    20. "Pages": 1,
    21. "Records": 10,
    22. "NeedEvalIO": false,
    23. "CLEstFromStat": false
    24. },
    25. "SearchPaths": [
    26. {
    27. "IsUsed": false,
    28. "IsCandidate": false,
    29. "Score": 1,
    30. "ScanType": "ixscan",
    31. "IndexName": "$id",
    32. "Direction": 1,
    33. "IXBound": {
    34. "_id": [
    35. [
    36. {
    37. "$minElement": 1
    38. },
    39. {
    40. "$maxElement": 1
    41. }
    42. ]
    43. ]
    44. },
    45. "NeedMatch": false,
    46. "IXEstFromStat": false
    47. },
    48. ...
    49. ]
    50. }