MySQL单表检索

来源:这里教程网 时间:2026-03-01 16:11:43 作者:

MySQL单表检索 自己原文公众号: https://mp.weixin.qq.com/s/zdeU6rq3qJ6SmzDv3TNtaQ

前几天遇到了一个问题,有个小伙伴提交了一个SQL:delete from t where trim(XXXX)<time。这句话大约要删除3000万条数据。几乎是全表了。执行了1分钟没动静,有人来问我要怎么处理?我看了一下,说停止。

     这时候我觉得有必要看看需求是什么?我们为什么要删除几千万。因为在任何关系型数据库中delete第一不释放空间,第二都不快(因为事务较大)。本次是MySQL、直接在监控上发现主从开始延迟。这是因为一个大事务执行的比较慢。

      这其实不怪数据库,因为这本身是违反使用规范的。类似的使用规范在网上随便都能查得到,我就不发表评论了。那么一边停止会话,一边请提SQL的小伙伴过来一下问问为什么要删除?

      答案就是查询慢了。好吧。又是一个老生常谈的问题。千万级单表查询,Oracle、MySQL、PostgreSQL或者说是一个关系型数据库就不可能慢。甚至可以说都差不多。(多表再说了)那么千万级别出现慢这种情况就几种可能:

1、没索引

2、索引建立的不对(顺序不对)

3、条件没用到索引(函数失效)

4、范围过大(不如不用索引快)

    交流了一下,果然不出所料。他就想刚要最近70分钟的数据。而SQL带上了函数所以索引失效。删除也是类似的。这也是常见的错误之一。

    那么后来帮他按照他的需求改写一下。执行一下16毫秒。这才是一个数据库应该有的样子。所以一般来说数据库超过100毫秒的我觉得都应该介入关注一下。因为我见到过不少低于1毫秒的。

    在千万级别的数据中进行检索,是不会慢的。如果出现慢,请检查执行计划对应上面的4种常见可能性。如果进行统计分析,只要带上合理的条件也是很快的。秒出问题不大,不需要其他等技术。

相关推荐