更新时间:2024-07-01 GMT+08:00

单表点查询性能差

问题现象

单表查询的场景下,预期1s以内返回结果,实际执行耗时超过10s。

原因分析

行列存表选择错误导致的问题,点查询场景应该使用行存表+btree索引。

分析过程

  1. 通过抓取问题SQL的执行信息,发现大部分的耗时都在“CStore Scan”。

  2. 分析出问题的场景:基表是一张十亿级别的表,每晚有批量增量数据入库,同时会有少量的数据清洗的工作。白天会有高并发的查询操作,查询不涉及表关联,并且返回结果都不大。

处理方法

调整表定义,将表修改为行存表,同时建立btree索引,索引建立的原则:
  1. 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。
  2. 不要定义冗余或重复的索引。
  3. 建立组合索引时候,要把过滤性比较好的列往前放。
  4. 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。
  5. 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。