从这一篇开始,准备总结一些直接受用的sql语句优化,写sql是第二要紧的,第一要紧的,是会分析怎么查最快,

因为当你写过很多sql后,查询出结果已经不是目标,快,才是目标。另外,通过测试和比较的结果才是有说服力的。

  1、COUNT()查询

  介绍:聚合函数。用于统计某个列值的数量,以及统计行数。如果统计列值要求列值非空,进一步,如果COUNT()

括号中指定了列或列的表达式,则统计这个表达式有值的结果(即表达式非空)。如果Mysql确认括号内表达式值不可能

为空,实际上会统计行数。再进一步,如果是COUNT(*)通配符,Mysql会忽略所有的列直接统计行数。

  最后得出的结论是:如果想统计行数或结果集行数,不要在括号内指定具体的列或列的表达式,直接COUNT(*)

而COUNT(f(col_name))计算的是f(col_name)非空行数量

  另外值得注意的一点:COUNT(Expression= "xxx" OR NULL)表示统计表达式值为xxx的行数,当表达式值不等于

xxx时,Expression= "xxx"值为false,前面讲了count(xxx)函数的统计规则,结合or运算符可以推测下为什么需要加

OR NULL这个条件

  其他的思路:使用Redis缓存计数,使用汇总表

  2、关联查询

  关联查询最需要优化的就是索引列

  (1)ON子句的列要有索引,且只需要在第二个表的相应字段上建索引,但是优化器关联表的顺序需要测试和分析

  (2)确保GROUP BY 和 ORDER BY的表达式只涉及到一个表中的列

  3、子查询

  不要使用,不要使用,除非有人拿枪逼着你使用,子查询改成关联查询

  4、LIMIT分页

  一个事实:offset非常大的时候,记录要扫描,但是结果集却会抛弃掉,比如 limit 10000,20,需要扫描10020条,但是

却只需要后面的20条。一般的做法是先计算出要返回的记录的第一条和最后一条的位置,比如这个例子是10000,10019,通

常这个表应该有一个自增的id,那么就是id between 10000,10019

  另一种思路是在前端UI上分页的方式上下功夫,此处略去

  5、UNION操作

  在《高性能Mysql》一书中作者提到,Mysql总是通过创建并填充临时表的方式来执行UNION查询。而临时表是没有索引

优化的。除非确实需要消除重复的行,否则一定要用UNION ALL。如果没有ALL关键字,Mysql会给临时表加上DISTINCT选

项,也就是唯一性检查,这需要不小的代价

  截止这篇,如果你能大致的理解Mysql是如何执行查询的,能手写项目中80%的sql,能设计出不错的表结构,索引,以及

学会测试和使用命令查询可能存在的优化漏洞,中等数据量的项目应该是没问题的。在接下来的篇章,笔者将在项目中实践一

些Mysql的高级特性。

Mysql优化系列之查询优化干货1的更多相关文章

  1. Mysql优化系列(2)--通用化操作梳理

    前面有两篇文章详细介绍了mysql优化举措:Mysql优化系列(0)--总结性梳理Mysql优化系列(1)--Innodb引擎下mysql自身配置优化 下面分类罗列下Mysql性能优化的一些技巧,熟练 ...

  2. (转)MySQL优化系列

    原文:http://blog.csdn.net/jack__frost/article/details/71194208 数据库,后端开发者必学,而且现在以MySQL居多.这个系列将系统化MySQL一 ...

  3. Mysql优化系列之查询性能优化前篇1

    前言 这是优化系列的最后一篇的第1小篇,我们其实可以直接从sql怎么写讲起,why not?但是我还是决定花2个篇幅 问一些问题,带着几个问题循序渐进的往下走. 一个sql语句是怎么被执行的? sql ...

  4. Mysql优化系列之数据类型优化

    本篇是优化系列的第一篇:数据类型 为了不产生赘述,尽量用简洁的语言来描述. 在选择数据类型之前,首先要知道几个原则: 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型意味着更快, ...

  5. mysql优化一之查询优化

    这一篇笔记的mysql优化是注重于查询优化,根据mysql的执行情况,判断mysql什么时候需要优化,关于数据库开始阶段的数据库逻辑.物理结构的设计结构优化不是本文重点,下次再谈 查看mysql语句的 ...

  6. Mysql优化系列之——优化器对子查询的处理

    根据子查询的类型和位置不同,mysql优化器会对查询语句中的子查询采取不同的处理策略,其中包括改写为连接(join),改写为半连接(semi-join)及进行物化处理等. 标量子查询(Scalar S ...

  7. 3.MySQL优化---单表查询优化的一些小总结(非索引设计)

    整理自互联网.摘要: 接下来这篇是查询优化.其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解.本篇会先讲单表查询优化(非索引设计).然后讲多表查询优化.索引优化设计以及库表 ...

  8. MySQL优化系列之一

    MySQL数据库常见的两个瓶颈是CPU和I/O. CPU在饱和的情况下一般发生在数据装入内存或者从磁盘上读取数据的时候,当装入的数据远大于 内存容量的时候,这时可能会发生I/O瓶颈, 如果是分布式应用 ...

  9. Mysql优化系列之查询性能优化前篇3(必须知道的几个事实)

    事实一:临时表没有任何索引 最常见的临时表莫过于在from子句中写子查询,遇到这种情况,Mysql会先将其查询结果放到一张临时表中, 然后将这个临时表当做普通表对待 事实二:执行计划优化 大多数的sq ...

随机推荐

  1. 2019.7.3模拟 光影交错(穷举+概率dp)

    题目大意: 每一轮有pl的概率得到正面的牌,pd的概率得到负面的牌,1-pl-pd的概率得到无属性牌. 每一轮过后,都有p的概率结束游戏,1-p的概率开始下一轮. 问期望有多少轮后正面的牌数严格大于负 ...

  2. bzoj 1010,1011

    上次应某位同学的要求先把代码给贴上了,今天还是细细讲讲比较好 bzoj 1010: dp+斜率优化 首先dp的思路并不是太难想出来,直接给方程:f[i] = min{f[j-1] + (sum[i]- ...

  3. 字符串dp——牛客多校第五场G

    比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...

  4. 37 VTK中的坐标系系统

    0 引言 在利用PCL的交互功能解决尺寸关联几何的指定问题时,涉及到一些显示上的操作.目前的需求是:将投影到注释平面上的点云,以与屏幕平齐的方式,显示在屏幕正中,这样方便用户进行操作.但是,在运用se ...

  5. NX二次开发-设置WCS位置UF_CSYS_set_wcs

    NX9+VS2012 UF_initialize(); //输入X向量Y向量输出一个3*3矩阵 ] = {0.0, 0.0, 1.0}; ] = {0.0, 1.0, 0.0}; ]; UF_MTX3 ...

  6. nginx+keepalive 实现高可用负载均衡方案

    转:http://ju.outofmemory.cn/entry/52165 主nginx负载均衡器:172.26.11.99  (通过keepalived配置了VIP:172.26.11.101供外 ...

  7. ionic:ionic 教程

    ylbtech-ionic:ionic 教程 1.返回顶部 1. ionic 教程 ionic 是一个强大的 HTML5 应用程序开发框架(HTML5 Hybrid Mobile App Framew ...

  8. linux就该这么学--资料整理--持续更新

    基础命令 服务管理 systemctl redhat7 systemctl start foo.service 启动服务 systemctl restart foo.service 重启服务 syst ...

  9. 关于private,default,protected,public,成员变量访问权限

    关于private,protected,public,default成员变量的访问权限,请参阅上图! 子类要访问父类的private成员变量,必须采用采用get方法: eg: public class ...

  10. 《转》python学习基础

    学习的python本来想自己总结,但是发现了一篇不错的大牛的博客,拿来主义,,又被我实践了 关于前两篇如果总结的不详细,因此把他人的转载过来 http://www.cnblogs.com/BeginM ...