Tidb查询优化

1. tidb查询优化

tidb数据库查询3亿条数据需要花费20s以上,然后按照下面的优化方式执行过后,查询只需要1.5s;

  1. 查看表的健康度
    1
    2
    3
    4
    5
       show stats_healthy where table_name='xxxx';
    ```
    2. 查看自动统计状态
    ```sql
    show variables like '%auto_analyze%';
    • tidb_auto_analyze_start_time和tidb_auto_analyze_end_time控制了自动收集统计信息的窗口;
    • tidb_auto_analyze_ratio 控制了可以进行自动收集统计信息的阈值,默认为0.5,如果后续表的数据量增加,可以酌情调整这个参数到0.3或者0.2,意味着这张表的数据修改超过总表行数的30%或者20%就会自动收集,会更敏感一些
    官方文档:https://docs.pingcap.com/zh/tidb/dev/statistics#%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0
  2. 调整自动收集统计信息的阈值
    1
    set global tidb_auto_analyze_ratio = 0.2;
  3. 查看健康度低于阈值的表信息
    1
    show stats_healthy where healthy<80;
  4. 低于80的重新收集统计信息
    1
    analyze table xxx
  5. 加快索引添加速度
    1
    2
    3
    4
    5
    show global variables like 'tidb_ddl_reorg_%';

    # 记录原来的数值, 添加完索引后记得改回去
    set global tidb_ddl_reorg_batch_size = 1024;
    set global tidb_ddl_reorg_worker_cnt = 16;
    如果某张表因为业务需求导入了大量的数据,而这些数据在达到tidb_auto_analyze_start_time之前就需要使用SQL进行查询,此时建议对导入的表进行手动的收集;
    我们也可以分析业务的行为,如果某张表有定时任务会自动插入大量数据,自动任务完成后需要产生报表的需求,也建议在自动任务结束后手动对相关的表进行手动收集;