常用指令
# 数据存储目录
show variables like 'datadir';
# 查看所有链接
show global status like 'thread%';
# 非交互式链接超时事件 8小时
show global variables like 'wait_timeout';
# 交互式链接超时事件 8小时
show global bariables like 'interactive_timeout';
# 数据库支持的链接数量默认:151
show variables like 'max_connections'
# 查询缓存是否开启状态, 默认关闭, mysql8.0移除
show variables like 'query_cache%';
# 查询优化器是否开启更详细的日志记录
show variables like 'optimizer_trace';
# 设置当前会话优化器开启详细的日志记录
set optimizer_trace="enabled=on";
mysql的系统变量作用域?
分为 global 与 session
不指定时默认为 session
global 代表所有会话
索引
索引即数据、数据即索引(一定存在聚簇索引).
是一种有序的数据结构;
建立索引的目的是加快数据的检索效率;
分类: 聚簇索引 与 辅助索引(即其它索引).
聚簇索引:
一定存在, B+Tree存储结构,叶子节点存储数据.
来源优先级依次为:
主键、非NULL的唯一性索引、隐藏索引(rowid)
辅助索引:
聚合索引(联合索引) 具有最左匹配原则;避免冗余索引.
FQA
mysql如何划分?
分为Server(服务层) 与 Storage Engin(存储引擎层).
存储引擎负责数据的管理,提供数据读写的api与Server交互.
建立索引的参考?
1.where、order by、 group By等搜索条件字段
2.数据的离散度(离散度值越高越好)
3.无序或者经常更新的数据不适合做主键
4.避免冗余索引(联合索引具有默认包含索引)
一条查询语句的执行过程?
1.连接数据库(与数据库建立会话,数据库为了更快建立会话连接,采用了连接池技术)
2.解析器(进行sql语句的词法、语法分析)
3.预解析器(sql语句的语义分析,即sql语句是否正确)
4.优化器(sql语句进行优化)
5.生成执行计划
6.执行器(执行执行计划, 调用存储引擎的api, 获取返回的数据刷选并处理返回给客户端).
mysql的优化层次
1. 表类型(即存储引擎)、表结构的优化
2. sql(即索引)的优化