每天进步一neinei---mysql索引查询

mysql索引查询

1、为啥状态分得不够细不能按索引取?

​ 为了防止单一状态所查询数据太多,而导致近乎全表查询,状态类别数量为x,时间复杂度为O(n/x),所以状态类别越少时间复杂度也就越高。

2、字段设置索引后查询速度加快

​ 如果没有索引,where 条件时将会进行全表查询那么查询的时间复杂度为O(n)。
​ 因为 当某一字段或多个字段 设置索引时,这里用map来进行解释,B+树我也不大清楚,也就是尽可能防止hash碰撞,原理差不太多,会将该字段当前所有类别作为key,也就是相当于group分组,由于状态类别不会太多,也比较细致,导致每个状态下的数据不多,所以时间复杂度为O(1),这速度就比没有按照索引查询不是一个数量级的了。

3、对字段设置完索引后,该类别下的数据还是太多怎么办?

​ 查询速度方面条件查询设置索引即可解决,但数据量还是太多怎么办,数据量如果太多,那么可能导致很多问题,比如常见的内存溢出。
​ 曾今有个同事,从mysql查出每条大概100K的50W条数据插入excel,直接将50W条数据直接拿出来,50W*100K ≈ 5GB,直接就 java.lang.OutOfMemoryError: Java heap space,
​ 后面就一起给他出解决方案,最终方案:这个50W数据最后被咱选择使用mysql的Limit特性来做,将50W总数查询出来,然后进行分批插入,大概确定了一下 1000条数据一批即可(双核4线程cpu,8G内存,经过500、1000、1500、2000数据测试)
​ 将50W数据分成50W/1000=500批次,每次查询sql为 select * from table where status = ? limit startLimit,1000
​ 由于limit特性,第一批查询1000,第二次从1001开始查询位置,之后查询的时间复杂度为O(1)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值