Mysql中常见的8种SQL毛病用法【MySQL教程】,mysql
作者:搜教程发布时间:2019-11-27分类:MySQL教程浏览:23评论:0
媒介
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语句中查询变量和字段定义范例不婚配是另一个罕见的毛病。比方下面的语句:
个中字段 bpn 的定义为 varchar(20),MySQL 的战略是将字符串转换为数字以后再比较。函数作用于表字段,索引失效。
上述状况多是运用程序框架自动填入的参数,而不是程序员的原意。如今运用框架许多很冗杂,运用方便的同时也警惕它可以给本身挖坑。
3、关联更新、删除
虽然 MySQL5.6 引入了物化特征,但须要特别注意它现在仅仅针对查询语句的优化。关于更新或删除须要手工重写成 JOIN。
比方下面 UPDATE 语句,MySQL 现实实行的是轮回/嵌套子查询(DEPENDENT SUBQUERY),其实行时候可想而知。
实行计划:
4、夹杂排序
MySQL 不能应用索引举行夹杂排序。但在某些场景,照样有时机运用特别要领提拔机能的。
实行计划显现为全表扫描:
因为 is_reply 只要0和1两种状况,我们根据下面的要领重写后,实行时候从1.58秒下降到2毫秒。
5、EXISTS语句
MySQL 看待 EXISTS 子句时,依然采纳嵌套子查询的实行体式格局。以下面的 SQL 语句:
实行计划为:
去掉 exists 更改成 join,可以防止嵌套子查询,将实行时候从1.93秒下降为1毫秒。
新的实行计划:
6、前提下推
外部查询前提不可以下推到庞杂的视图或子查询的状况有:
聚合子查询;
含有 LIMIT 的子查询;
UNION 或 UNION ALL 子查询;
输出字段中的子查询;
以下面的语句,从实行计划可以看出其前提作用于聚合子查询以后:
肯定从语义上查询前提可以直接下推后,重写以下:
SELECT target Count(*) FROM operation WHERE target = 'rm-xxxx' GROUP BY target
实行计划变成:
关于 MySQL 外部前提不能下推的细致诠释申明请参考文章:
http://mysql.taobao.org/monthly/2016/07/08
相相识更多相干题目请接见ki4网:mysql视频教程
以上就是Mysql中罕见的8种SQL毛病用法的细致内容,更多请关注ki4网别的相干文章!
标签:mysql
相关推荐
- 如何修改mysql的默认时区_MySQL教程,mysql,时区
- mysql数据库如何创建数据表_MySQL教程,mysql,数据表
- linux源码安装mysql5.7_MySQL教程,linux,mysql,mysql5.7
- mysql外键约束怎么写_MySQL教程,mysql,外键约束
- mysql如何设置字符集为UTF8_MySQL教程,mysql,UTF8,字符集
- mysql怎么创建数据库_MySQL教程,mysql,数据库
- 如何查看mysql的日志文件_MySQL教程,mysql,日志文件
- mysql如何删除表中一行数据?_MySQL教程,mysql
- access是数据库管理系统吗_MySQL教程,access,mysql
- mysql修改字段类型有哪些?_MySQL教程,mysql,修改字段
你 发表评论:
欢迎- MySQL教程排行
-
- 1Mysql如何挂盘_MySQL教程,Mysql
- 2mysql中key 、primary key 、unique key 与index区别详解_MySQL教程,mysql
- 3关于一道mysql查询面试题的思考解决过程_MySQL教程,mysql
- 4关于linux下mysql去除严格模式_MySQL教程,linux
- 5分离数据库和附加数据库的区别_MySQL教程,数据库
- 6如何修改mysql的默认时区_MySQL教程,mysql,时区
- 7利用mysql生成唯一序号_MySQL教程,mysql
- 8看看MySQL 5.6, 5.7, 8.0的新特性!_MySQL教程,MySQL
- 9mysql数据库如何创建数据表_MySQL教程,mysql,数据表
- 最新文章
- 广而告之