文章目录
-
- [一. 存储引擎](#一. 存储引擎)
-
- [1.1 MySQL体系结构](#1.1 MySQL体系结构)
- [1.2 存储引擎简介、特点、存储引擎选择](#1.2 存储引擎简介、特点、存储引擎选择)
- [1.3 MySQL的启动、连接、关闭(Linux)](#1.3 MySQL的启动、连接、关闭(Linux))
- 二、索引
-
- [2.1 索引结构与常见索引](#2.1 索引结构与常见索引)
- [2.2 索引分类与理解](#2.2 索引分类与理解)
- [2.3 索引的语法:创建、查看、删除](#2.3 索引的语法:创建、查看、删除)
- [2.4 查询数据库几大操作频率的语句](#2.4 查询数据库几大操作频率的语句)
- 三、慢查询日志
一. 存储引擎
1.1 MySQL体系结构

1.2 存储引擎简介、特点、存储引擎选择
- 存储引擎是针对表的;不是针对数据库;即:同一数据库中的不同表,可以指定不同存储引擎。
- 存储引擎的指定:在创建表时,ENGINE关键字指定
sql
create table name(
......
)ENGINE = INNODB
- 查询当前数据库所支持的存储引擎
sql
show engines;

InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认 的MySQL存储引擎。
特点 :
DML操作遵循ACID模型,支持事务;
行级锁,提高并发访问性能;
支持外键foreign key 约束,保证数据的完整性、正确性。
文件 :xxx.idb;idb代表的是表名,innodb引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)数据和索引。参数:innodb_file_per_table 决定多张表和一张表共用这样的表空间文件。

1.3 MySQL的启动、连接、关闭(Linux)
sql
# 启动mysql服务
systemctl start mysqld
# 如果使用rpm安装的mysql ,登录时,需要输入初始化密码;下面是查询密码:
grep 'temporary password' /var/log/mysqld.log
# 登录连接
mysql -u root -p
二、索引
索引(index)帮助MySQL高效获取数据的数据结构(有序)。
| 优势 | 劣势 |
|---|---|
| 提高数据检索的效率,降低数据库的IO成本 | 索引列也是要占用空间的 |
| 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 | 索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行insert、update、delete时,效率降低 |
2.1 索引结构与常见索引
MySQL的索引是在存储引擎层实现的;不同的存储引擎有不同的结构,主要包含如下几种:
| 索引结构 | 描述 |
|---|---|
| B+Tree索引 | 最常见的索引类型,大部分引擎都支持B+Tree索引 |
| hash索引 | 底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询 |
| R-tree(空间索引) | 空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少 |
| Full-text(全文索引) | 是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,solr,Es |

2.2 索引分类与理解

在InnoDB存储引擎中,根据索引的存储形式,又可分为以下两种:

聚集索引选取规则:
- 如果存在主键,主键索引就是聚集索引
- 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
- 如果表没有主键,或没有合适的唯一索引,则Innodb会自动生成一个rowid作为隐藏的聚集索引。

2.3 索引的语法:创建、查看、删除
sql
# 创建索引
create [unique | fulltext] index index_name on table_name(index_col_name,...);
# 查看索引
show index from table_name; # 结果展示为表格
show index from table_name \G; # 会以文档的形式展示
# 删除索引
drop index index_name on table_name
2.4 查询数据库几大操作频率的语句
sql
show global status like 'Com_______';

三、慢查询日志
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。MySQL的慢查询日志默认没有开启。查询其状态:
sql
show variables like 'slow_query_log';

需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:
txt
# 开启MySQL慢日志查询开关
slow_query_log=1
# 设置慢日志时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志。
long_query_time=2