mysql> show variables like '%cost_model%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| tidb_cost_model_version | 2 |
+-------------------------+-------+
1 row in set (0.00 sec)
在tidb_cost_model_version = 2的情况下可以查看执行计划cost成本代价计算方式:
mysql> explain analyze format=true_card_cost select * from customer where C_ADDRESS='abc' order by C_PHONE limit 100;
+------------------------------+-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-----------+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+-----------+------+
| id | estRows | estCost | costFormula | actRows | task | access object | execution info | operator info | memory | disk |
+------------------------------+-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-----------+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+-----------+------+
| TopN_8 | 1.43 | 3728257.14 | (((((cpu(150000*filters(1)*tikv_cpu_factor(49.9))) + (scan(150000*logrowsize(242.69)*tikv_scan_factor(40.7)))) + ((exprCPU(0*0*tikv_cpu_factor(49.9))) + (orderCPU(0*log(100)*tikv_cpu_factor(49.9)))) + (topMem(100*216*tikv_mem_factor(0.2)))) + (net(0*rowsize(216)*tidb_kv_net_factor(3.96))))/15.00) + ((exprCPU(0*0*tidb_cpu_factor(49.9))) + (orderCPU(0*log(100)*tidb_cpu_factor(49.9)))) + (topMem(100*216*tidb_mem_factor(0.2))) | 0 | root | | time:345.2ms, loops:1 | tpch.customer.c_phone, offset:0, count:100 | 0 Bytes | N/A |
| └─TableReader_16 | 1.43 | 3723937.14 | ((((cpu(150000*filters(1)*tikv_cpu_factor(49.9))) + (scan(150000*logrowsize(242.69)*tikv_scan_factor(40.7)))) + ((exprCPU(0*0*tikv_cpu_factor(49.9))) + (orderCPU(0*log(100)*tikv_cpu_factor(49.9)))) + (topMem(100*216*tikv_mem_factor(0.2)))) + (net(0*rowsize(216)*tidb_kv_net_factor(3.96))))/15.00 | 0 | root | | time:345.1ms, loops:2, cop_task: {num: 1, max: 344.8ms, proc_keys: 150000, tot_proc: 343ms, rpc_num: 1, rpc_time: 344.8ms, copr_cache_hit_ratio: 0.00, distsql_concurrency: 15} | data:TopN_15 | 277 Bytes | N/A |
| └─TopN_15 | 1.43 | 55859057.06 | ((cpu(150000*filters(1)*tikv_cpu_factor(49.9))) + (scan(150000*logrowsize(242.69)*tikv_scan_factor(40.7)))) + ((exprCPU(0*0*tikv_cpu_factor(49.9))) + (orderCPU(0*log(100)*tikv_cpu_factor(49.9)))) + (topMem(100*216*tikv_mem_factor(0.2))) | 0 | cop[tikv] | | tikv_task:{time:343ms, loops:147}, scan_detail: {total_process_keys: 150000, total_process_keys_size: 30533765, total_keys: 150001, get_snapshot_time: 87.9µs, rocksdb: {key_skipped_count: 150000, block: {cache_hit_count: 501}}} | tpch.customer.c_phone, offset:0, count:100 | N/A | N/A |
| └─Selection_14 | 1.43 | 55854737.06 | (cpu(150000*filters(1)*tikv_cpu_factor(49.9))) + (scan(150000*logrowsize(242.69)*tikv_scan_factor(40.7))) | 0 | cop[tikv] | | tikv_task:{time:343ms, loops:147} | eq(tpch.customer.c_address, "abc") | N/A | N/A |
| └─TableFullScan_13 | 211936.00 | 48369737.06 | scan(150000*logrowsize(242.69)*tikv_scan_factor(40.7)) | 150000 | cop[tikv] | table:customer | tikv_task:{time:338ms, loops:147} | keep order:false | N/A | N/A |
+------------------------------+-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-----------+----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------+-----------+------+
5 rows in set, 3 warnings (0.37 sec)
总的cost并不是简单的累加,对于存在并行的情况下也会做相应的处理。