关于Mysql百万级数据的快速检索

MySQL百万级数据检索


msyql表数据达800多万,表中多个字段建立索引,某些字段为复合索引,在执行某个sql个时候,时间达到8秒,实在是不能忍,线上切个分页都是很慢,仔细研究后发现,索引没问题,sql写的有问题。
索引信息如下
索引如下
原sql

select * from table where DATE_FORMAT(createtime,’%Y-%m-%d’) = #createTime#

根据索引信息显示,这种写法肯定是不走索引的。第一,运用了DATE_FORMAT函数,对索引字段运用函数导致索引失效。第二,图中的复合索引为status和createtime的复合索引,需满足最左原则,sql中无status的条件查询,失效。
修改后

select * from table where creatime BETWEEN CONCAT(#createtime#, ’ 00:00:00’) AND CONCAT(#createtime#, ’ 23:59:59’) AND status in (0,1,2)

修改后的sql是走索引的,去掉了函数,并且增加了status的查询条件。

总结
复合索引满足最左原则,首先给索引字段套用函数,肯定是会导致索引失效的,其次,若不想加入复合索引的另一个字段,则可以修改复合索引的顺序,如图中status在前createtime在后,若查询条件只有status,则是走索引的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值