百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Mysql中常见的8种SQL差错用途
分享文章到:

Mysql中常见的8种SQL差错用途

发布时间:09/01 来源:未知 浏览: 关键词:

前言

MySQL在2016年依然保持强劲的数据库流行度增长趋势。越来越多的客户将本人的利用创立在MySQL数据库之上,乃至是从Oracle迁移到MySQL上来。但也存在部分客户在使用MySQL数据库的历程中碰到一些比方响应时间慢,CPU打满等状况。

阿里云RDS专家效劳团队帮忙云上客户解决过许多紧急问题。现将《ApsaraDB专家诊断报告》中显现的部分常见SQL问题总结如下,供大家参照 。

1、LIMIT 语句

分页查询是最常用的场景之一,但也平常也是最容易出问题的地方。

比方关于下面简便的语句,一样 DBA 想到的方法是在 type, name, create_time 字段上加组合索引。这样前提排序都能有效的利用到索引,机能快速晋升。

SELECT *  FROM   operation  WHERE  type = 'SQLStats'         AND name = 'SlowLog'  ORDER  BY create_time  LIMIT  1000, 10;

好吧,大概90%以上的 DBA 解决该问题就到此为止。

但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员依然会埋怨:我只取10笔记录为什么还是慢?

要知道数据库也并不知道第1000000笔记录从什么地方开端,即便有索引也需要从头运算一次。显现这种机能问题,多数情形下是程序员偷懒了。在前端数据阅读翻页,或者大数据分批输出等场景下,是可以将上一页的最大值当做参数作为查询前提的。SQL 从新设计如下:

SELECT   *  FROM     operation  WHERE    type = 'SQLStats'  AND      name = 'SlowLog'  AND      create_time > '2017-03-16 14:00:00'  ORDER BY create_time limit 10;

2、隐式转换

SQL语句中查询变量和字段定义类型不匹配是另一个常见的错误。比方下面的语句:

隐式准换2.jpg

其中字段 bpn 的定义为 varchar(20),MySQL 的战略是将字符串转换为数字之后再比力。函数作用于表字段,索引失效。

上述状况大概是利用程序框架主动填入的参数,而不是程序员的原意。此刻利用框架许多很冗杂,使用利便的同时也当心它大概给本人挖坑。

3、关联更新、删除

虽然 MySQL5.6 引入了物化特性,但需要特殊留意它当前仅仅针对查询语句的优化。关于更新或删除需要手工重写成 JOIN。

比方下面 UPDATE 语句,MySQL 实际施行的是轮回/嵌套子查询(DEPENDENT SUBQUERY),其施行时间不言而喻。

关联更新.jpg

施行方案:

关联更新3.jpg

4、混合排序

MySQL 不克不及利用索引停止混合排序。但在某些场景,还是有时机使用非凡办法晋升机能的。

混合排序.jpg

施行方案显示为全表扫描:

执行计划全盘扫描.jpg

由于 is_reply 只要0和1两种状态,我们依照下面的办法重写后,施行时间从1.58秒落低到2毫秒。

执行计划全盘扫描2.jpg

5、EXISTS语句

MySQL 看待 EXISTS 子句时,依然采纳嵌套子查询的施行方式。如下面的 SQL 语句:

exists语句.jpg

施行方案为:

exists执行计划.jpg

去除 exists 更换为 join,能够幸免嵌套子查询,将施行时间从1.93秒落低为1毫秒。

exists1.jpg

新的施行方案:

exists新执行计划.jpg

6、前提下推

外部查询前提不克不及够下推到复杂的视图或子查询的状况有:

聚合子查询;

含有 LIMIT 的子查询;

UNION 或 UNION ALL 子查询;

输出字段中的子查询;

如下面的语句,从施行方案可以看出其前提作用于聚合子查询之后:

条件下推1.jpg

条件下推2.jpg

肯定从语义上查询前提可以直接下推后,重写如下:

SELECT target Count(*)  FROM   operation  WHERE  target = 'rm-xxxx'  GROUP  BY target

施行方案变为:

条件下推3.jpg

关于 MySQL 外部前提不克不及下推的具体说明说明请参照 文章:

http://mysql.taobao.org/monthly/2016/07/08

相理解更多相关问题请拜访PHP中文网:mysql视频教程

以上就是Mysql中常见的8种SQL错误用途的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板