mysql强制走索引

在一张表中,仅有千万级别的数据,现在我有一个SQL语句,我该增加的索引都增加了,但是执行速度很慢,我们经过分析执行的SQL语句得到如下:

在这里插入图片描述

是因为,在查询的时候,使用的索引错误了,也可以强制其走指定的索引:

select * from table force index(idx_start_date) where …

总结
根据实际的情况,需要控制IN查询的范围。原因有以下几点

1. IN 的条件过多,会导致索引失效,走索引扫描

2. IN 的条件过多,返回的数据会很多,可能会导致应用堆内内存溢出。

所以必须要控制好IN的查询个数

不过id In(‘1’,‘2’, …,‘1000’ )这种语句,最好数量控制在一千以内,再多的话,sql效率就会下降。如果有需求超过一千以上,说明楼主需要冗余字段了,比如冗余你业务场景中的用户账号ID。

至于楼上建议join联表的,我觉得如果表数量级在10万级别还可以;一旦达到百万级,联表就是灾难。

in 实在显示不了,试试left join on 连接一下吧

另外注意:

EXPLAIN执行计划中type字段分为以下几种:

  1. ALL
  2. INDEX
  3. RANGE
  4. REF
  5. EQ_REF
  6. CONST,SYSTEM
  7. NULL

自上而下,性能从最差到最好

你可能感兴趣的:(mysql,mysql,数据库,sql)