为OR 条件涉及字段建联合索引、为IN 查询字段建单列索引
- 联合索引不可能保证覆盖所有条件字段,这个肯定不现实
- 为IN字段建立单列索引。IN单值的这个示例已经很清楚了,有单列索引,结果走了表扫描,要求联合索引才走索引(我在查询中特意用了IGNORE INDEX,就是因为环境中已经创建了联合索引来解决这个问题)
- IN 限制在500内这个可以做为规则,但具体是500,还是多少,没个定论,我前面的查询示例,IN 近400,和 IN 一个值都走表扫描
tidb_max_execution_time、强制索引
- 这些都是针对明确已知的,已经属于问题发生后的止损的手段了
资源管控
- 有效果,但属于一种有损的手段。比如查询走表索引,无并发时执行时长是2左右,并发导致存储满负载,通过资源管控确实能够把资源负载降低下来,但是资源负载不高的情况有,有并发仍然发现查询时长明显变长,出现阻塞,并导致某些长时间得不到资源的查询中断