单表提取数据量较大,如何优化

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本】centos7.6

  • TiDB 版本】3.0.3

  • 磁盘型号】ssd

  • 集群节点分布】pd 3,tidb 3,tikv 4

  • 数据量 & region 数量 & 副本数】150G,9000,3

  • 问题描述(我做了什么)】 单表500完数据量,通过索引查询数据有100万左右,耗时7S左右。 1、第一次使用classid索引进行查询,速度在8s左右, 2、通过添加复合索引idx_2(classid,paperAuditstatus,paperAvlstatus,paperPublicstatus,paperDelstatus)速度提升了1秒 3、请问针对提取的数据量比较多,如何优化

  • 关键词】sql优化

这种情况下可以尝试:

  1. 调大tidb_distsql_scan_concurrency这个参数值,再进行查询看效率是否有提升
  2. 另外可以尝试不通过索引进行查询,看下效率情况

把默认值调整到32之后,效果不佳

目前这个SQL是索引回表比较慢,这个组合索引可以简化一下:

  1. 选择三个选择性最高的列建立组合索引
  2. 调整图片中的两个参数,提升索引索引扫描的效率

image 参数修改之后速度提升了2秒。

这个目前来看返回的结果有100W,而且SQL语句其实属于比较简单的语句,从语句和索引上优化空间不大,可以再调整一下参数值看能否有性能提升了

通过调整tidb的参数,速度提高了2秒。之后在调大,就没有明显效果。 请问还有哪些参数可以调整,优化

set @@tidb_index_lookup_size = 2000000;

set @@tidb_index_lookup_concurrency = 8;

您好,tidb优化使用中,碰到下面问题,导致一个搜索栏,因为条件不同,速度变慢的情况

1、同一个sql,查询的条件不同,优化器对语法的执行计划会有差异

2、增加where条件之后效果(and s.papertypeCode=‘LNZT’),速度变慢,explain之后,发现索引走的是classid,导致速度变慢。 image

1、不同的查询条件肯定会影响执行计划的,一般来说优化器会根据你的条件去选择一个最优的执行计划。比如:多个索引中选择哪个最合适。 2、有可能是统计信息的问题。如果发现没有走中合适的索引的话。可以使用 hint 来强制指定使用某个索引先暂时绕开这个问题。