Mysql优化系列之查询优化干货1
从这一篇开始,准备总结一些直接受用的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的更多相关文章
- Mysql优化系列(2)--通用化操作梳理
前面有两篇文章详细介绍了mysql优化举措:Mysql优化系列(0)--总结性梳理Mysql优化系列(1)--Innodb引擎下mysql自身配置优化 下面分类罗列下Mysql性能优化的一些技巧,熟练 ...
- (转)MySQL优化系列
原文:http://blog.csdn.net/jack__frost/article/details/71194208 数据库,后端开发者必学,而且现在以MySQL居多.这个系列将系统化MySQL一 ...
- Mysql优化系列之查询性能优化前篇1
前言 这是优化系列的最后一篇的第1小篇,我们其实可以直接从sql怎么写讲起,why not?但是我还是决定花2个篇幅 问一些问题,带着几个问题循序渐进的往下走. 一个sql语句是怎么被执行的? sql ...
- Mysql优化系列之数据类型优化
本篇是优化系列的第一篇:数据类型 为了不产生赘述,尽量用简洁的语言来描述. 在选择数据类型之前,首先要知道几个原则: 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型意味着更快, ...
- mysql优化一之查询优化
这一篇笔记的mysql优化是注重于查询优化,根据mysql的执行情况,判断mysql什么时候需要优化,关于数据库开始阶段的数据库逻辑.物理结构的设计结构优化不是本文重点,下次再谈 查看mysql语句的 ...
- Mysql优化系列之——优化器对子查询的处理
根据子查询的类型和位置不同,mysql优化器会对查询语句中的子查询采取不同的处理策略,其中包括改写为连接(join),改写为半连接(semi-join)及进行物化处理等. 标量子查询(Scalar S ...
- 3.MySQL优化---单表查询优化的一些小总结(非索引设计)
整理自互联网.摘要: 接下来这篇是查询优化.其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解.本篇会先讲单表查询优化(非索引设计).然后讲多表查询优化.索引优化设计以及库表 ...
- MySQL优化系列之一
MySQL数据库常见的两个瓶颈是CPU和I/O. CPU在饱和的情况下一般发生在数据装入内存或者从磁盘上读取数据的时候,当装入的数据远大于 内存容量的时候,这时可能会发生I/O瓶颈, 如果是分布式应用 ...
- Mysql优化系列之查询性能优化前篇3(必须知道的几个事实)
事实一:临时表没有任何索引 最常见的临时表莫过于在from子句中写子查询,遇到这种情况,Mysql会先将其查询结果放到一张临时表中, 然后将这个临时表当做普通表对待 事实二:执行计划优化 大多数的sq ...
随机推荐
- HAProxy服务器 、Keepalived热备 、Keepalived+LVS
配置HAProxy负载平衡集群 1.1 问题 准备三台Linux服务器,两台做Web服务器,一台安装HAProxy,实现如下功能: 客户端访问HAProxy,HAProxy分发请求到后端Real Se ...
- NX二次开发-UFUN获取边的光顺性UF_MODL_ask_edge_smoothness(找相切面)
#include <uf.h> #include <uf_modl.h> #include <uf_obj.h> UF_initialize(); //获取面的所有 ...
- hive表操作(转)
转载于:http://blog.csdn.net/lovelovelovelovelo/article/details/52234971 数据类型 基本数据类型 集合类型,array.map.stru ...
- 3. Image Structure and Generation
名词 Extensible Linking Format(ELF) 3.1 The structure of an ARM ELF image ARM ELF映像包含sections, regions ...
- CVE-2018-3246 weblogic xxe
使用P牛2018-2894的容器 http://192.168.245.130:7001/ws_utc/begin.do 导入测试用例 上传时抓取数据包 POST /ws_utc/resources/ ...
- Android Telephony分析(二) ---- RegistrantList详解
前言 本文主要讲解RegistrantList的原理,以及如何快速分析RegistrantList相关的代码流程.在Telephony模块中,在RIL.Tracker(ServiceStateTrac ...
- js 关闭页面(Scripts may close only the windows that were opened by it.)
传送http://blog.csdn.net/kuangfengbuyi/article/details/52052301 js关闭当前页面,当该页面不是其他页面打开的,而是直接输入url, 直接用w ...
- 一个很SB的方法,来开始调一个刚启动就SB的程序
自己鼓捣的方法,累死我了... 遇到一个程序,这程序启动之后,会自动重新启动我的电脑, 我想调试它一下,但是遇到了问题, 如果我用调试器附加上去的话,电脑是不重起了,但是它启动了之后会立刻黑屏,全黑, ...
- HTTP入门简介
一.概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了客户端和服务器端通信时,发送数据的格式 特点: 1.基于TCP/IP的高级协议 2.默认端口号:80 ...
- 使用SpringBoot1.4.0的一个坑
时隔半年,再次使用Spring Boot快速搭建微服务,半年前使用的版本是1.2.5,如今看官网最新的release版本是1.4.0,那就用最新的来构建,由于部署环境可能有多套所以使用maven-fi ...