mysql blob 索引_Mysql 创建单列索引解决单表 LongBlob 字段查询过慢问题

MySQL 中,只要表中存在 longblob 或者 longtext 类型的字段,并且数据量一多,那么对这张的查询操作将会变得非常缓慢,但使用单列索引就可以解决此类问题

问题重现

现在 MySQL 中有一张表,假设名为 imgs ,一共三个字段,id, mid, fileData,其中 id 为主键,mid 为关联表 id,fileData 为一个 longBlob 类型的字段

现在我们用脚本或者代码随机往 imgs 表中插入 10w 条左右的数据,再运行由 MyBatis 生成的查询 SQL:

select 'true' as QUERYID, id, mid, fileData from imgs WHERE ( mid = 1257 )

那么不出意外,运行这段 SQL 所需要的时间将会是非常高昂的成本(在我本地测试用了足足 5 秒)

对应到线上环境,5 秒的查询时间是不可能被允许的,必须优化

创建单列索引

我们可以分析,如此缓慢的查询,其本质原因就是因为 longBlob 字段造成的开销影响的,如果可以在查询之初就迅速定位一个较小的范围,那么就可以解决这个问题

而索引恰恰就能够完美的解决: 如果我们对 mid 创建索引 index,那么 MySQL 能够通过 where mid = 1257 迅速把搜索范围定位到 mid = 1257 的范围内,然后再去根据其他搜索条件去查找

运行以下 SQL 创建索引:

alter table imgs add index mid(mid);

之后再运行同样的查询语句:

select 'true' as QUERYID, id, mid, fileData from imgs WHERE ( mid = 1257 )

就可以解决问题,至少在我本地,由原本的 5 秒查询时间,缩短到了 0.02 秒

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值