Tag Archives | mysql

mysql 查询计划

?

一、 概述

MySQL的查询执行计划(QEP)是借助EXPLAIN命令来实现的。了解MySQL 优化器是如何执行SQL 语句的。只是提供信息并不提供建议。EXPLAIN语句可以用作DESCRIBE的一个同义词,或获得关于MySQL如何执行SELECT语句的信息:?EXPLAIN?tbl_name是DESCRIBE?tbl_name或SHOW COLUMNS FROM?tbl_name的一个同义词。?如果在SELECT语句前放上关键词EXPLAIN,MySQL将解释它如何处理SELECT(在MySQL 5.7, 可以被EXPLAIN?的语句除了SELECT?还有?DELETE,?INSERT,?REPLACE, andUPDATE),提供有关表如何联接和联接的次序。只关心语句而不是一个表的explain。

语法:

[......]

阅读全文

Tags: , ,

Comments { 0 }

Mysql索引说明

关于mysql索引的说明,比较散的说明。

  1. 索引的好处,除了提高检索效率之外:另外是有利于排序&分组

索引最大益处就是将该字段作为检索条件的时候可以极大的提高检索效率,加快检索时间,降低检索过程中所需要读取的数据量。索引还有一个非常重要的用途,那就是降低数据的排序成本。每个索引中索引数据都是按照索引键键值进行排序后存放的,所以,当我们的Query 语句中包含排序分组操作的时候,如果我们的排序字段和索引键字段刚好一致,MySQL Query Optimizer就会告诉mysqld 在取得数据之后不用排序了,因为根据索引取得的数据已经是满足客户的排序要求。

那如果是分组操作呢?分组操作没办法直接利用索引完成。但是分组操作是需要先进行排序然后才分组的,所以当我们的Query 语句中包含分组操作,而且分组字段也刚好和索引键字段一致,那么mysqld 同样可以利用到[......]

阅读全文

Tags: , ,

Comments { 0 }

Mysql 索引原理(MyISAM&InnoDB)

一、要点

在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。

二 、MyISAM的索引

MyISAM的索引方式是“非聚集”索引。MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址

1. MyISam主索引

[caption id="attachment_1269" align="alignnone" width="300"]myisam-primary-index MyISAM表的主索引(Primary key)[/caption]

 

如图一共有三列,假设我们以Col1为主键,以col1构造B+树。B+树的叶子节点上保存的是该记录的地址,可以理解为该行数据的物理存储位置。

2. MyISam辅助索引

在MyISAM中,主索引和辅助索引(Secondary[......]

阅读全文

Tags: , ,

Comments { 0 }

mysql 体系和模块协作

全文摘录自《MySQL性能调优与架构设计》书中的关于mysql服务器架构部分的描述。感谢作者。说实话,可能是为了让更大众的和我一样的工程师了解主要思路,作者讲的并不像一个产品白皮书中介绍一个数据库系统的功能那么详细,甚至说不那么专业。但是真真切切的说,讲清楚了。更重要能让我决定把全文archive下来的原因是,正因为介绍的不是那么细致,也就是层面有点高,会发现这计划不是mysql一个数据库 系统这样在工作,其他的数据库系统(服务方式工作的,如orale,mssql等)也都是这种方式在工作。

Server 根据配置文件启动,工作线程、数据文件,工作日志。这些其实是一个向外提供服务的系统必备的组件,其配合方式也是几乎类似的,不要说和这些关系数据库系统间的类似,Hbase等其他数据(库)服务也无不是这样工作的。而其中的query cache,执行优化器等也是在数据库这类系统中几乎必备的组件[......]

阅读全文

Tags: , ,

Comments { 0 }

mysql join原理和优化

一、关于

在MySQL 中,只有一种Join 算法,就是大名鼎鼎的Nested Loop Join,他没有其他很多数据库所提供的Hash Join,也没有Sort Merge Join。顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数据,然后合并结果。如果还有第三个参与Join,则再通过前两个表的Join 结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复。

二、原理

参考的query为:

在作者前面的例子中,其中在user_group的group_id、user_id列上,在 group_message的 id列上,在group_message的group_id列上,在group_m[......]

阅读全文

Tags: ,

Comments { 0 }