• IXSCAN的推演公式

    IXSCAN的推演公式

    IXSCAN 的推演公式将展示以下信息:

    字段名类型描述
    IndexPages整型估算的 IXSCAN 输入的索引页数
    IndexLevels整型估算的 IXSCAN 输入的索引层数
    MthSelectivity浮点型估算的 IXSCAN 使用匹配符进行过滤的选择率
    MthCPUCost整型估算的 IXSCAN 使用匹配符过滤一个记录的 CPU 代价
    IXScanSelectivity浮点型估算的 IXSCAN 使用索引时需要扫描索引的比例
    IXPredSelectivity浮点型估算的 IXSCAN 使用索引进行过滤的选择率
    PredCPUCost整型估算的 IXSCAN 使用索引进行过滤一个记录的 CPU 代价
    IndexReadPages数组估算的 IXSCAN 需要读取的索引页个数NeedEvalIO 为 false 不需要计算公式为:max( 1, ceil( IndexPages IXScanSelectivity ) )
    IndexReadRecords数组估算的 IXSCAN 需要读取的索引记录个数公式为:max( 1, ceil( Records IXScanSelectivity ) )
    ReadPages数组估算的 IXSCAN 需要读取的数据页个数NeedEvalIO 为 false 不需要计算公式为:max( 1, ceil( Pages PredSelevtivity ) )
    ReadRecords数组估算的 IXSCAN 需要读取的记录个数公式为:max( 1, ceil( Records IXPredSelectivity ) )
    IOCost数组估算的 IXSCAN 的 IO 代价的公式及计算过程NeedEvalIO 为 false 不需要计算即各个数据页进行随机扫描的代价总和公式为:RandomReadIOCostUnit ( IndexReadPages + ReadPages ) ( PageSize / PageUnit )
    CPUCost数组估算的 IXSCAN 的 CPU 代价的公式及计算过程即各个记录从索引页和数据页中提取并进行匹配符过滤的代价总和如果需要进行匹配符过滤,公式为:IndexReadRecords ( IXExtractCPUCost + PredCPUCost ) + ReadRecords ( RecExtractCPUCost + MthCPUCost )如果不需要进行匹配符过滤,公式为:IndexReadRecords ( IXExtractCPUCost + PredCPUCost ) + ReadRecords RecExtractCPUCost
    StartCost数组估算的 IXSCAN 的启动代价(内部表示)公式为:IXScanStartCost + PredCPUCost IndexLevels
    RunCost数组估算的 IXSCAN 的运行代价(内部表示)公式为:IOCPURate IOCost + CPUCost
    TotalCost数组估算的 IXSCAN 的总代价(内部表示)公式为:StartCost + RunCost
    OutputRecords数组估算的 IXSCAN 的输出记录个数公式为:max( 1, ceil( Records * min( IXPredSelectivity, MthSelectivity ) ) )

    示例

    1. "ScanNode": {
    2. "IndexPages": 49,
    3. "IndexLevels": 1,
    4. "MthSelectivity": 0.00001,
    5. "MthCPUCost": 2,
    6. "IXScanSelectivity": 0.00001,
    7. "IXPredSelectivity": 0.00001,
    8. "PredCPUCost": 1,
    9. "IndexReadPages": [
    10. "max( 1, ceil( IndexPages * IXScanSelectivity ) )",
    11. "max( 1, ceil( 49 * 1e-05 ) )",
    12. 1
    13. ],
    14. "IndexReadRecords": [
    15. "max( 1, ceil( Records * IXScanSelectivity ) )",
    16. "max( 1, ceil( 100000 * 1e-05 ) )",
    17. 1
    18. ],
    19. "ReadPages": [
    20. "max( 1, ceil( Pages * IXPredSelectivity ) )",
    21. "max( 1, ceil( 49 * 1e-05 ) )",
    22. 1
    23. ],
    24. "ReadRecords": [
    25. "max( 1, ceil( Records * IXPredSelectivity ) )",
    26. "max( 1, ceil( 100000 * 1e-05 ) )",
    27. 1
    28. ],
    29. "IOCost": [
    30. "RandomReadIOCostUnit * ( IndexReadPages + ReadPages ) * ( PageSize / PageUnit )",
    31. "10 * ( 1 + 1 ) * ( 65536 / 4096 ) ",
    32. 320
    33. ],
    34. "CPUCost": [
    35. "IndexReadRecords * ( IXExtractCPUCost + PredCPUCost ) + ReadRecords * RecExtractCPUCost",
    36. "1 * ( 2 + 1 ) + 1 * 4",
    37. 7
    38. ],
    39. "StartCost": [
    40. "IXScanStartCost + PredCPUCost * IndexLevels",
    41. "0 + 1 * 1",
    42. 1
    43. ],
    44. "RunCost": [
    45. "IOCPURate * IOCost + CPUCost",
    46. "2000 * 320 + 7",
    47. 640007
    48. ],
    49. "TotalCost": [
    50. "StartCost + RunCost",
    51. "1 + 640007",
    52. 640008
    53. ],
    54. "OutputRecords": [
    55. "max( 1, ceil( Records * min( IXPredSelectivity, MthSelectivity ) ) )",
    56. "max( 1, ceil( 100000 * min( 0.00001, 0.00001 ) ) )",
    57. 1
    58. ]
    59. }