麻烦参考这个文档导出一下统计信息
https://docs.pingcap.com/zh/tidb/stable/statistics#导出统计信息
谢谢,正在分析
麻烦 test 表结构给一下
CREATE TABLE test
(
id
bigint(20) NOT NULL COMMENT ‘主键’,
bill_no
varchar(50) COLLATE utf8mb4_general_ci NOT NULL ,
player_id
varchar(20) COLLATE utf8mb4_general_ci NOT NULL ,
platform
varchar(10) COLLATE utf8mb4_general_ci NOT NULL ,
game_type
int(2) NOT NULL ,
currency_type
varchar(10) COLLATE utf8mb4_general_ci NOT NULL ,
game_code
varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL ,
game_name
varchar(80) COLLATE utf8mb4_general_ci DEFAULT NULL ,
bet_number
decimal(18,2) NOT NULL ,
valid_bet_number
decimal(18,2) NOT NULL ,
net_number
decimal(18,2) NOT NULL ,
dml
decimal(18,2) NOT NULL ,
flag
tinyint(1) NOT NULL DEFAULT ‘1’,
expand_str
varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
bet_time
datetime DEFAULT NULL ,
beijing_time
datetime DEFAULT NULL ,
create_time
datetime DEFAULT NULL ,
update_time
datetime DEFAULT NULL,
tax
decimal(18,2) DEFAULT NULL,
PRIMARY KEY (id
),
KEY bet_time_index
(bet_time
),
KEY ims_game_record01_beijing_time_index
(beijing_time
),
KEY create_time_index
(create_time
),
KEY update_time_index
(update_time
),
KEY idx_player_id
(player_id
,platform
),
UNIQUE KEY uidx_platform
(platform
,game_type
,bill_no
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
我理解的,这个表里面没有数据,那么 estrows 估算出来的数据并没有太大的数量级的差异。您这面有用大量数据测试过吗?或者您觉得这个执行计划哪里有问题?
因为这个表是线上的,之前有很多数据,然后我删除了。之后我看执行计划还是扫250多行数据,就有点不理解。
是的,按我的理解,估算里面扫描 0 行和 250 行应该是一个数量级的。
扫描获取 1 行的代价和 获取 250 行的代价应该是一个数量级的。
这种估算出来的数量级都是 250。
mysql> explain select id, c1, c2 from t1 where c1 > 100 and c1 < 1000000;
±------------------------------±--------±----------±---------------------------±----------------------------------------------------+
| id | estRows | task | access object | operator info |
±------------------------------±--------±----------±---------------------------±----------------------------------------------------+
| IndexLookUp_10 | 250.00 | root | | |
| ├─IndexRangeScan_8(Build) | 250.00 | cop[tikv] | table:t1, index:ind_c1(c1) | range:(100,1000000), keep order:false, stats:pseudo |
| └─TableRowIDScan_9(Probe) | 250.00 | cop[tikv] | table:t1 | keep order:false, stats:pseudo |
±------------------------------±--------±----------±---------------------------±----------------------------------------------------+
这个 estrows 是估算出来的,所以我理解这个数量级的偏差是可以接受的。
好的。谢谢