随笔分类 -  MYSQL那些事

MYSQL那些事
MySQL执行计划
摘要:和很多其他关系型数据库不通,MySQL并不会在生成查询字节码来执行查询。MySQL生成查询的一棵指令树,然后通过存储引擎执行完成这棵指令树并返回结果。最终的执行计划包含了重构查询的全部信息。如果某个查询执行EXPLAIN EXTENDED 之后,在执行SHOW WARNINGS,就可以看到重构出... 阅读全文

posted @ 2015-12-09 23:11 郑彦秋 阅读(685) 评论(0) 推荐(0)

MySQL如何执行关联查询
摘要:MySQL中‘关联(join)’ 一词包含的意义比一般意义上理解的要更广泛。总的来说,MySQL认为任何一个查询都是一次‘关联’ --并不仅仅是一个查询需要到两个表的匹配才叫关联,索引在MySQL中,每一个查询,每一个片段(包括子查询,设置基于表单的select)都可能是关联。 所以,理解My... 阅读全文

posted @ 2015-12-07 23:10 郑彦秋 阅读(977) 评论(0) 推荐(0)

MySQL查询优化处理
摘要:查询的生命周期的下一步是将一个sql转化成一个执行计划,MySQL再依照这个执行计划和存储引擎进行交互。这包括多个子阶段:解析sql,预处理,优化sql执行计划。这个过程中任何错误(例如语法错误)都可能终止查询。这里不打算详细介绍MySQL内部实现,而只是选择性的介绍其中几个独立的部分,在实际中... 阅读全文

posted @ 2015-12-02 00:08 郑彦秋 阅读(429) 评论(0) 推荐(0)

MySQL查询执行的基础
摘要:当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解这一点,很多查询优化实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行。 换句话说,是时候回头看看我们之前讨论的内容了:MySQL执行一个查询的过程。当向MySQL发送一个请求的时... 阅读全文

posted @ 2015-12-01 00:27 郑彦秋 阅读(340) 评论(0) 推荐(0)

MySQL重构查询的方式
摘要:在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的结果--而不一定总要从MySQL获取一模一样的结果集。有时候可以查询转换一种写法让其返回一样的结果,但是性能更好。但也可以通过修改应用代码,用另一种方式完成查询,最终达到一样的目的。这里我们将介绍如何通过这种方式来重构查询,并展示合... 阅读全文

posted @ 2015-11-30 22:46 郑彦秋 阅读(1194) 评论(1) 推荐(1)

MySQL是否在扫描额外的记录
摘要:在确定查询只是返回需要的数据之后,接下来应该看看查询为了返回结果是否扫描了过多的数据。对于MySQL,最简单的衡量查询开销的三个指标如下: 1响应时间,2扫描行数,3返回行数 没有那个指明能够完美的衡量查询的开销,但他们大致反映了MySQL在内存执行查询时需要访问多少数据,并可以大概推算出查... 阅读全文

posted @ 2015-11-29 22:42 郑彦秋 阅读(1026) 评论(1) 推荐(0)

Mysql 查询性能优化
摘要:查询优化,索引优化,库表结构优化需要齐头并进,一个不能落。 为什么查询速度会慢 在阐释编写快速的查询之前,需要清楚一点,真正重要的是响应时间。如果把查询看做是一个任务的话,那么它由一系列子任务构成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务... 阅读全文

posted @ 2015-11-27 23:17 郑彦秋 阅读(206) 评论(0) 推荐(0)

Mysql 索引案例学习
摘要:理解索引最好的办法是结合示例,所以这里准备了一个索引的案例。 假设要设计一个在线约会网站,用户信息表有很多列,包裹国家,地区,城市,性别,眼睛颜色,等等。完整必须支持上面这些特征的各种组合来搜索用户,还不行一些根据用户的最后在线时间,其他会员对用户的屏风等对用户进行排序并对结果进行限制。如何世... 阅读全文

posted @ 2015-11-25 23:37 郑彦秋 阅读(1927) 评论(0) 推荐(0)

MySQL索引和锁
摘要:索引和锁可以让查询锁定更少的行。如果你的查询从不访问那些不需要访问的行,那么就会锁定更少的行,从两个方面来看这对性能都有好处。首先,虽然innodb的行锁效率很高,内存使用也很少,但是锁定行的时候仍然会带来额外的开销,其次,锁定超过需要的行会增加锁竞争,并减少并发性。 innodb只有在访问行... 阅读全文

posted @ 2015-11-25 21:44 郑彦秋 阅读(3054) 评论(0) 推荐(0)

MySQL 使用索引扫描来做排序
摘要:MySQL有两种方式可以生成有序的结果:通过排序操作;或者按照索引顺序扫描;如果EXPLAIN 出来的结果的type列的值为“index”,则说明MySQL使用了索引扫描来做排序(不要和Extra列的“Using index”搞混)。 扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着... 阅读全文

posted @ 2015-11-24 23:23 郑彦秋 阅读(757) 评论(0) 推荐(0)

MySQL 覆盖索引
摘要:通常大家都会根据查询的WHERE 条件来穿件合适的索引,不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个查询,而不单单是WHERE 条件部分。索引确实是一种查找数据的高效方式,但是MySQL也可以使用索引来直接获取列的数据,这样就不再需要读取数据行。如果索引的叶子节点已经包含要查询的数... 阅读全文

posted @ 2015-11-24 00:10 郑彦秋 阅读(696) 评论(0) 推荐(0)

MySQL 聚簇索引
摘要:聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于其实现方式,但innoddb 的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。 当表有聚簇索引时,它的数据实际上存放在索引的叶子页(leaf page)中。术语‘聚簇’表示数据行和相邻的键值进错的存储在一起。... 阅读全文

posted @ 2015-11-23 22:42 郑彦秋 阅读(9708) 评论(2) 推荐(2)

高性能的索引策略(下)
摘要:选择合适的索引列顺序 我们遇到的最容易起困惑的问题就是索引列的顺序。正确是顺序一来与使用该索引的查询,并且同时需要考虑如何更好的满足排序和分组的需要(顺便说明,本节内容使用与B-Tree索引;hash或者其他类型的索引并不会像B-Tree索引一样按照顺序顺序存储数据)。 在一个多列的B-Tr... 阅读全文

posted @ 2015-11-20 00:34 郑彦秋 阅读(290) 评论(0) 推荐(0)

高性能的索引策略(上)
摘要:高效的选择和使用索引有很多方式,其中有些事针对特殊案例的优化方法,有些则是针对特定行为的优化,使用哪个索引,以及如何评估选择不同索引性能影响的技巧,则需要持续不断的练习。接下来将介绍如何高效的使用索引。 独立的列 我们通常会看到一些查询不当的使用索引,或者是的MySQL无法使用已有的索引。如... 阅读全文

posted @ 2015-11-19 23:28 郑彦秋 阅读(1178) 评论(0) 推荐(0)

索引的优点
摘要:索引可以让服务器跨苏的定位到指定的位置。但是这病不是索引的唯一作用,到目前位置都可以看到,根据创建索引的数据结构不同,索引也有一些其他的附加作用。 最常见的是B-Tree索引,按照属性存储的数据,所以MySQL 可以用来做ORDER BY 和GROUP BY 操作。因为数据是有序的,所以B-T... 阅读全文

posted @ 2015-11-19 22:10 郑彦秋 阅读(640) 评论(0) 推荐(0)

Mysql 索引的基础(下)
摘要:如果需要存储大量的URL并需要根据URL进行搜索查找。如果使用B-Tree 来存储URL,存储的内容就会很大,因为URL本身都很长。正常情况下会有如下查询:SELECT id FROM url WHERE url="http://www.baidu.com"; 若删除原来URL上的索引,而新增... 阅读全文

posted @ 2015-11-19 21:55 郑彦秋 阅读(289) 评论(0) 推荐(0)

Mysql 索引的基础(上)
摘要:要理解Mysql 中索引是如何工作的,最简单的方法是去看一看书的"索引部分":如果想在一本书中找到某个特定的主题,一般先看书的"索引",找到对应的页码。 在Mysql中,存储引擎用类似的方法使用索引,其先在索引中找到对应的值,然后根据匹配的索记录找到对应的数据行。加入要运行下面的查询:sele... 阅读全文

posted @ 2015-11-18 23:23 郑彦秋 阅读(349) 评论(0) 推荐(0)

如果使用的是orm,是否还需要关系索引
摘要:简而言之:是的,仍然需要理解索引,即使是使用对象关系映射(ORM)工具。 ORM工具能够产生符合逻辑的,合法的查询(多数的时候),除非只是生成非常基本的查询(例如仅是根据主键查询的),否则它很难生成适合索引的查询。无聊时多么复杂的ORM工具,在精妙和负责的索引面前都是“浮云”。很多时候,即使是... 阅读全文

posted @ 2015-11-18 22:22 郑彦秋 阅读(389) 评论(1) 推荐(0)

Mysql 数据类型使用说明
摘要:FLOAT 和DOUBLE 类型支持使用标准的浮点运算进行近似计算。 DECIMAL类型用于存储精确的小数。 因为cpu不支持对DECIMAL的直接计算,所以在Mysql5.0及更高的版本中,MYSQL服务器自身实现了DECIMAL的高精度计算。相对而言,cpu直接支持原生浮点计算,所以浮点... 阅读全文

posted @ 2015-11-18 00:00 郑彦秋 阅读(583) 评论(0) 推荐(0)

MYSQL 磁盘临时表和文件排序
摘要:因为Memory引擎不支持BOLB和TEXT类型,所以,如果查询使用了BLOB或TEXT列并且需要使用隐式临时表,将不得不使用MyISAM磁盘临时表,即使只有几行数据也是如此。 这会导致严重的性能开销。。即使配置Mysql将临时表存储在内存块设备上(ram-disk),依然需要很多昂贵的系统调... 阅读全文

posted @ 2015-11-17 22:43 郑彦秋 阅读(1153) 评论(1) 推荐(0)