explain SELECT COUNT(*) AS tp_count FROM `df_order` WHERE `user_id` = 452 AND ( ctime >= 1630425600 ) AND ( ctime <= 1630512000 ) LIMIT 1;
user_id和ctime均有添加索引,ctime保存的是时间戳格式,如果只是单独user_id或者单独ctime检索很快,但是2个where加在一起就变的很慢,请问是什么原因?需要怎么优化?谢谢
下方是explain图片:
单独ctime:
单独user_id:
user_id + ctime:
索引没用好,多条件的情况下,设置组合索引。索引只有user_id生效了。
还有select count(*)改为count(1)
看三张图,前两张最后都有Using Index,但第三张并没有。两个条件合起来的情况下,索引没有起到作用,所以速度不行。需要建立组合索引,把时间和ID一起作为索引
你搞个联合索引加到user_id和ctime上,看看效果
= 可以把等于号去掉,如 >1630425599,也能提高查询效率