同一个表的索引和主键,执行的时间差异巨大

参考最佳实践中的设计方式,来调整表结构和数据获取的方式,来达成你对性能上的要求

Time: 2021-08-04T11:29:13.172198628+08:00

Txn_start_ts: 426782833977065473

User: root@192.166.2.34

Conn_ID: 101006

Query_time: 443.372256131

Parse_time: 0.00012722

Compile_time: 0.000560772

Cop_time: 9.27862316 Process_time: 6.413 Wait_time: 0.977 Request_count: 971 Total_keys: 3009041 Process_keys: 2765868

DB: EnjoyCRM

Index_names: [tb_card:PRIMARY]

Is_internal: false

Digest: f9e70b6bee5d3772feeaacfdda79b17e3f6457dfe38e8d077eaf6d461aa7c313

Stats: tb_card:426782809492815879

Num_cop_tasks: 971

Cop_proc_avg: 0.006604531 Cop_proc_p90: 0.017 Cop_proc_max: 0.046 Cop_proc_addr: 192.168.0.138:20160

Cop_wait_avg: 0.001006179 Cop_wait_p90: 0.002 Cop_wait_max: 0.023 Cop_wait_addr: 192.168.0.138:20160

Mem_max: 481137354

Prepared: false

Plan_from_cache: false

Has_more_results: false

Succ: true

Plan: tidb_decode_plan(‘oAJMMAkzMF84CTAJMTEzMjkwOTMuNjAJASQxCQoxCTFfNwkxThwAWGxpa2UoZW5qb3ljcm0udGJfY2FyZC5jBQcUbm8sICJfHQEwIiwgOTIpCjIJMTNfNQFQoDQxNjEzNjcJdGFibGU6YywgaW5kZXg6UFJJTUFSWShjX29yZ19pZCwgEVFwKSwgcmFuZ2U6KCI4IiAiMjEwMDA3MDQwNzY0IiwZE2g4OTEzMjU3IiksIGtlZXAgb3JkZXI6ZmFsc2UBzQgwXzYBfkbqAAB0EYhCNgA=’)

Plan_digest: c49930e5546ad15fd4706d004ae86d9d3d31fc44a845c8fcbf255c577031326d

/* ApplicationName=DBeaver 21.0.3 - SQLEditor <Script-8.sql> / select c. from tb_card c use index (PRIMARY ) where 1=1 and (c.c_org_id = ‘8’ and c.c_cardno>‘210007040764’ and c.c_cardno<‘210008913257’ ) and c.c_cardno like repeat(’_’,length(‘210008913257’));

如果你的问题已解决:

  • 如果你自己排查解决了,请附上你的解决方案,对自己的方案标记【对我有用】。
  • 如果别人帮助你解决了问题,那么请选择【最有价值】的回复,标记为【对我有用】,对帮助你的人,也是一种嘉奖和赞赏。
    • 被标记了【对我有用】的问题,才能被搜索到,这样子也能帮助他人更高效地找到答案。标记了【对我有用】还能获得 5 积分,5 经验值。

如果你的问题还没有解决,请继续追问及反馈你遇到的问题,或者 @billmay 帮你申请技术支援。

问题尚未解决,本贴再挂几天,如果解决不了,打算升级tidb版本试下,谢谢大家支持

新建一个同结构测试表,插入部分数据试试是不是主键也慢

Hi~ 这个应该是预期内的时间差异,从执行计划看 process key 差异比较大,扫 key 成本增加,可能原因如下:

  1. 符合主键是创建表时候一起创建的,随着表中的数据进行更新、删除操作;
  2. 新建的复合索引是最近新建的,没被 gc 掉的版本个数不一样导致的,对应扫 key 操作少

之前按您的这个思路做过测试,即将主键删除后再创建,也是一样慢

麻烦提供一下复现操作和数据 ?

- 如果你的问题已解决:
  - 如果你自己排查解决了,请附上你的解决方案,对自己的方案标记【对我有用】。
  - 如果别人帮助你解决了问题,那么请选择【最有价值】的回复,标记为【对我有用】,对帮助你的人,也是一种嘉奖和赞赏。
- 被标记了【对我有用】的问题,才能被搜索到,这样子也能帮助他人更高效地找到答案。标记了【对我有用】还能获得 5 积分,5 经验值。
- 如果你的问题还没有解决,请继续追问及反馈你遇到的问题。

trace format=‘row’ 主键SQL 结果

请问问题解决了吗 ?是否已经升级了文档?

升级TIDB4.0.9后,问题完美解决

2 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。