mysql强制走索引

  • Post author:
  • Post category: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

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



版权声明:本文为qq_36763236原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。