安装
- 是否安装
rpm -qa|grep -i mysql - -ivh
rpm -ivh: install visual h:进度条 - 用户组
id userName: 根据用户名查找用户


安装不在详述. 主要学习的是高级部分. 这部分自己百度去吧
mysql 目录
各种相关的目录
通过 rpm 安装的话

my.cnf

这里的 sort_buffer_size 和 read_buffer_size 的大小
也是优化的一部分
日志
主从复制
log-bin
错误日志
log-error
查询日志
log
存储文件
.frm: 表结构
.myd,: 数据
.myi: 索引
架构

1. 连接层
2. conn pool
3. ManagementUtil
备份,容灾恢复,安全,复制,集群
4. SQL interface
存储过程,SQL触发器
5. Parser
解析器
6. Optmizer
mysql 优化器
7. Cache & Buffers
8. pluginables
存储引擎可拔插
SQL执行加载顺序
FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>


索引
聚集,覆盖,次要,复合,前缀,hash
分类
单值索引
唯一索引
复合索引
语法

创建索引的情况

explain

id: 查询中执行 select 子句或操作表顺序
id相同: mysql 加载表顺序由上至下
id不同: 先加载id值较大的.
id相同不同:
先执行id值大的.
如果id值相同,由上至下执行
延伸续表 <derived2>
这里的2就是 id == 2

select_type

主要用于 查询类型. 普通查询,联合查询,子查询
SIMPLE: 简单查询
查询中不包含子查询或 UNION
PRIMARY: 主键查询
查询中包含复杂子查询,最外层标记为PRIMARY
SUBQUERY: 子查询
在 select 或 where 中包含了子查询
DERIVED: 联合查询
在 FROM 列表中包含的子查询被标记为 DERIVED. mysql 会递归执行这些子查询,把结果放在临时表中
UNION:
第二个 select 出现在 UNION 之后,则被标记为 UNION.
若UNION包含在FROM子句的子查询之中,则外层的SELECT被标记为 UNION
UNION RESULT:
从 UNION 表获取结果的 SELECT
type

system: 忽略不计.理论上会出现
const: 表示通过索引一次即可找到. 用于比较primary key 所用和 unique 索引.
eq_ref: 唯一性索引扫描. 每个索引建,表中只有一条记录与之匹配.常用于主键或唯一索引扫描
ref: 非位移性索引扫描. 返回匹配某个单独值的所有行

range: 只检索给定范围的行. 使用一个索引来选择行.
一般是 where 语句中出现了 between ,<, >, in 等查询会出现
possible_keys: 显示可能应用在这张表的索引. 以及 查询涉及到字段上若存在索引,则显示出来
key: 实际使用的索引. 如果查询使用了覆盖索引,则该索引仅出现在 key 列表中
覆盖索引; 查询字段和复合索引中字段的顺序一致
key_len: 索引的长度.索引使用了多少字节. 是根据表定义计算所得.而不是通过表内检索所得
key: 实际使用到的索引
ref: 显示索引的哪一列被使用了. 可能的话是一个常数.哪些列或常数用于被查找索引列上面的值.
rows: 大致估算出找到所需记录数所需要读取的行数
Extra:
额外的信息. 之前的字段不足以填充
Extra

Using filesort: mysql 会对数据使用一个外部的索引排序. 不是按照表内的索引顺序进行读取.
无法利用索引完成的排序称为 "文件排序"
Using temporary: 使用了临时表保存中间结果. MySql 在对查询结果排序时使用临时表. 常见于 order by 和 group by
Using index: 表示响应的 select 操作中使用了 覆盖索引. 避免了访问表的数据行.
如果同时出现了 using where. 表示索引被用来执行索引键值
覆盖索引
select 的数据列只从索引中就能够取得.不必读取数据行. mysql 可以利用索引返回 select 列表中的字段.
要查询的列被所建立的索引覆盖
Using where
... ...
using join buffer
链接使用了缓存
impossible where
where 的值是false.不能用来获取数据.
select tables optimized away
在没有group by 的情况下对索引优化做了一个操作
distinct
优化 distinct . 在找到第一个元祖的时候就收工
本文将详细探讨MySQL的安装优化、my.cnf参数调整、主从复制与日志管理,重点讲解索引分类与创建技巧,以及SQL执行顺序和explain的使用。适合进阶学习MySQL性能调优。
99

被折叠的 条评论
为什么被折叠?



