ITPub博客

首页 > 数据库 > MySQL > MySQL单表检索

MySQL单表检索

原创 MySQL 作者:xuexiaogang 时间:2021-12-11 09:11:26 0 删除 编辑

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种常见可能性。如果进行统计分析,只要带上合理的条件也是很快的。秒出问题不大,不需要其他等技术。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-2847128/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SQL 汉诺塔
下一篇: Oracle MySQL PG选型
请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953258