高性能mysql 第6章 查询性能优化(2)

union的局限性:

mysql无法将limit条件从外层下推到内层。

如:

可以优化为:

并行执行:

mysql无法利用多核特性来并行执行查询。

hash关联:

mysql不支持hash关联。

跳跃索引扫描(skip index scan)

不支持。经过测试,在5.6版本支持了。

在同一张表上进行更新的限制:

MySQL不允许对同一张表同时进行查询和更新。这其实并不是优化器的限制,下面的SQL无法运行,这个SQL尝试将两个表中相似行的数量记录到字段cnt中:

可以通过生成表的形式绕过上面的限制,因为mysql只会把这个表当作一个临时表来处理。实际上,这执行了两个查询:一个是子查询中的select语句,另一个是多表关联update,只是关联的表是一个临时表。子查询会在update语句打开表之前就完成,所以下面的查询会正常执行:

hint提示:

DELAYED:针对insert和replace。执行后立即返回,然后在空闲的时候,数据才会写入到硬盘。比较适合记录日志。

STRAIGHT_JOIN:定义关联顺序。

SQL_SMALL_RESULT,SQL_BIG_RESULT:用于查询,标志结果集的大小,引导排序操作在内存或者硬盘中执行。

SQL_BUFFER_RESULT:将查询结果放入一个临时表,尽快的释放表锁。

SQL_CACHE,SQL_NO_CACHE:是否缓存。

USE INDEX,IGNORE INDEX,FORCE INDEX:强制使用索引,和不适用索引。

优化关联查询:

  • 尽量确保on的列上有索引。
  • 确保group by和order by只涉及一张表的列。这样才可以用到索引。ps(order by好理解,group by自己思考也会明白,如果group by上没有索引,肯定要全表并排序,或者使用临时表才能做group by)
  • mysql内部有可能会自动转换等价的distinct和 group by语法。

用户自定义变量:

这一章节是mysql的独有的功能,不是sql标准,可以在查询里使用自定义变量,来实现行号、统计等功能。这里我没有细看,罗列了两篇文章可以参考:

http://www.cnblogs.com/guaidaodark/p/6037040.html

http://blog.csdn.net/muzizhuben/article/details/49449853

时间: 2024-10-06 14:00:28

高性能mysql 第6章 查询性能优化(2)的相关文章

高性能mysql 第六章查询性能优化 总结(上)查询的执行过程

6  查询性能优化 6.1为什么查询会变慢 这里说明了的查询执行周期,从客户端到服务器端,服务器端解析,优化器生成执行计划,执行(可以细分,大体过程可以通过show profile查看),从服务器端返回客户端结果. 而执行部分作为最重要的一环,需要做的事情比较多,而不合适的query往往让执行过程做了不必要的操作,或者不能使用更优秀的底层数据结构,从而用时更久. 6.2慢查询基础:优化数据访问 访问数据量多大,超过实际所需是慢查询的一个原因.导致这种情况的原因大致有两个 1.应用程序向mysql

高性能mysql 第6章 查询性能优化

在mysql的执行计划中: id id用来表示执行顺序,id相同的为一组,先执行id数字大的组,然后执行数字小的组.在id相同的一组内,顺序由上而下执行. type 表示MySQL在表中找到所需行的方式,又称"访问类型",常见类型如下: 由左至右,由最差到最好. ALL代表全表扫描,index代表索引全扫描,range索引范围扫描,ref是非唯一性索引扫描,常见的是作用在=的比较上,但是非唯一.eq_ref:唯一性索引扫描. possible_keys 指出MySQL能使用哪个索引在表

第五章 查询性能优化之多极缓存

1.redis集中式缓存 //商品详情页浏览 @RequestMapping(value = "/get",method = {RequestMethod.GET}) @ResponseBody public CommonReturnType getItem(@RequestParam(name = "id")Integer id){ ItemModel itemModel = null; // 先从本地缓存取 itemModel = (ItemModel) cac

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定

mysql笔记03 查询性能优化

查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要么让子任务运行的更快. 2). 通常来说,查询的生命周期大致可以按照顺序来看:从客户端,到服务器端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中"执行"可以认为是整个生命周期中最重要的阶段,这其中包括 大量为了检索数据到存储引擎的调用以及调用后

170727、MySQL查询性能优化

MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下我们从数据库的索引和查询语句的设计两个角度介绍如何提高MySQL查询性能. 数据库索引 索引是存储引擎中用于快速找到记录的一种数据结构.索引有多种分类方式,按照存储方式可以分为:聚簇索引和非聚簇索引:按照数据的唯一性可以分为:唯一索引和非唯一索引:按照列个数可以分为:单列索引和多列索引等.索引也有多

读薄《高性能MySql》(二)Schem与数据优化

读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Schem与数据优化 选择更优的数据类型 当我们设计数据类型的时候应该选择最优的数据类型,因为好的数据类型会使数据库性能提升很多,特别是在使用 ORM 的时候要尤其消息,因为需求的复杂性,ORM 基本上没什么可能会生成最优的类型. 接下来介绍一些通用的数据类型结构. 更小的通常更好 一般情况下,应该尽量使用存储数据最小的数据单类型 尽量使用自带的数据类型 比如保存日期最好用 mysql 内有的日期类型而

查询性能优化

查询性能优化 怎么样算查询性能比较好?响应时间短(获取查询数据速度快) 优化数据访问 查询性能低下最基本的原因是访问的数据太多.大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化. 对于低效的查询,我们发现通过下面两个步骤来分析总是很有效: 确认应用程序是否在检索大量超过需要的数据.这通常意味着访问了太多行,但有时候也可能是访问了太多的列. 确认MySQL服务器层是否在分析大量超过需要的数据行. 总结:1.只查询了需要的列2.在满足要求的前提下尽可能扫描少的行 是否向数据库请求了不需要

Sql Server查询性能优化之走出索引的误区

据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是,或者干脆把整个查询SQL直接发给DBA,让DBA直接帮忙优化了,所以造成的状况就是开发人员对于索引的理解.认识很局限,以下就把我个人对于索引的理解及浅薄认识和大家分享下,希望能解除一些大家的疑惑,一起走出索引的误区 误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的