在一张表中,仅有千万级别的数据,现在我有一个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字段分为以下几种:
- ALL
- INDEX
- RANGE
- REF
- EQ_REF
- CONST,SYSTEM
- NULL
自上而下,性能从最差到最好
版权声明:本文为qq_36763236原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。