mysql 数据查询时碰到的憋屈问题


问题描述:数据表中有百万数据,分别属于user 1,user 2,user 3,三个用户数据量相当,为提高查询速度,我在排序的字段上加了索引。查询语句如下

   select keywords from search_history where user_id=1 order by update_time limit 10;

   问题来了,查询user 1和user 2的时间竟然相差几十倍!


研究过程:刚开始认为是查询字段有空值导致查询没有用索引而是全表扫描,随即我查询了一下的确有空值,但当我将空值记录删除后问题依旧,这让

我百思不得其解。老师提醒我是不是因为外键的原因导致的,我尝试了一下,将user_id 的外键去除,再次查询,奇迹出现了,查询时间提升几十倍。


原因:外键约束用来保证数据的一致性和完整性,但会增加数据库负荷,user 表与多个表有关联,user2 在这些表中均有数据,故其速度很慢。在性能

要求较高,安全性要求次之的系统中(可由程序控制),建议不用外键。


大数据查询的优化:数据结构优化,索引优化,慢查询优化,mysql参数设置优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值