MySQL - 索引

2022-08-10  本文已影响0人  SheHuan

MySQL 体系结构

连接层:最上层是一些客户端和连接服务,主要进行连接处理、授权认证、以及相关的安全方案等,服务器也会对安全接入的每个客户端验证其所具有的操作权限
服务层:第二层结构主要完成大部分核心服务功能,比如SQL接口、SQL的分析优化、缓存的查询、部分内置函数的执行,所有夸存储引擎的功能也在这一层实现
引擎层:存储引擎真正负责了MySQL中数据的存储和提取,服务器通过API和存储引擎通信,
存储层:主要是将数据存储在文件系统之上,并完成和存储引擎的交互

存储引擎

存储引擎就是存储数据、建立索引、更新、查询数据等技术的实现方式,存储引擎是基于表的。MySQL5.5版本开始默认的存储引擎是InnoDB,之前版本是MyISAM

索引

索引是帮助 MySQL 高效查询数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

优缺点

1、优点:提高数据检索效率,降低数据库的 IO 成本;通过索引列对数据进行排序,降低数据排序成本,降低 CPU 消耗。
2、缺点:索引也要占磁盘空间,虽然大大提高了数据检索效率,但也会降低表中数据的更新效率(Insert、Update、Delete),因为此时需要维护索引结构。

索引实现方式
索引分类
索引语法

SQL 性能分析

#启用慢查询日志
slow_query_log = 1
#指定慢查询日志文件的路径和名字
slow_query_log_file = slow.log
#SQL语句运行时间超过该值才会被记录
long_query_time = 10

结果中各个字段的含义:
1、id:表示查询中执行 select 字句或者操作表的顺序,id 相同时执行顺序从上到下,id 不同时值越大越先执行。
2、select type:表示当前查询语句的类型(simple:不使用表连接或子查询;primary:主查询,即外层的查询;union:union中第二个或者后面的查询;subquery:select/where后边的子查询)
3、type:连接的类型,性能由好到坏依次为:null(不查询表,直接查询指定值)、system(只有一条数据的系统表)、const(查询索引字段,并且最多只有一行匹配)、eq_ref(主键、唯一索引)、ref(非唯一索引)、range(索引的范围查询)、index(查询索引中全部的数据)、all(查询没有索引的列,全表扫描)。
4、possible_keys:查询时可能用到的索引
5、key:实际用到的索引,没有使用索引则为 null
6、key_len:索引长度,在不损失精度的情况下,越短越好
7、ref:表示索引的哪一列被使用了,如果可能的话,是一个常数
8、rows:MySQL 认为需要执行查询的行数(预估值)
9、filtered:查询返回的行数占读取行数的百分比,值越大越好

索引的使用

索引设计原则

SQL 优化

数据插入
# 客户端连接服务端时,添加参数 --local-infile
mysql --local-infile -u root -p;
# 设置全局参数 local_infile = 1,开启从本地加载文件导入数据的开关
set global local_infile =1;
# 执行 load 指令加载文件中的数据到表结构中
load data local infile '文件路径' into table 'table_name' fields terminated by ',' lines terminated by '\n';
主键优化
order by 优化
group by 优化
limit 优化
count 优化
update 优化
上一篇 下一篇

猜你喜欢

热点阅读