死活不走带时间的索引 求大佬帮忙给个解决方案~
对于range类型,选择性小于17%了,就会走全表扫描,而非range
首先你应该明白你这视走了索引的,type为 ref就是非空 唯一的索引,或者你用到的关联查询里面只用到了最左前缀 也就是你那个Id 的普通索引。
这里有个疑惑你为何不给这个ID主键索引而是普通索引,业务需要吗?
然后你的疑惑视为啥不走你的id加时间的联合索引吧。理论上你这范围查询可以走到type到 range。但是你要知道ref的速度会比range快你说你要走慢的不走快的你让MySQL优化器怎么做?当然你硬要到联合的range 可以选择把id上的删掉。
建议关注我,这块的直播课不定期有
如果AreaStartEnd索引不删的话 你可以加强制索引
AreaId 单字段索引建的没有意义,可以删除的,AreaStartEnd 已经包含了 AreaId索引的
select * from (select startdate from tablename where id=12) as aa where aa.startdate between 'A' and 'B';
这样写是不是会快点
你都写字符串了 直接用大于小于就行了