mysql
基础
启动: service mysql start
关闭: service mysql stop
设置root账户密码:/usr/bin/mysqladmin -u root password root
查看字符编码: show variables like ‘%char%’;
设置编码: 修改my.cnf
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation_server=utf8_general_ci
查看表结构: desc 表名;
慢查询: show variables like ‘%slow%’;
查看运行状态:(查询/增删改查 数量):show status ;
-- 添加主键
alter table userInfo add constraint pk_name primary key(name);
-- 添加唯一建
alter table cy add constraint uk_name unique index(name);
存储引擎
查看全部存储引擎: show engines;
- InnoDB:事务优先(适合高并发;行锁)
- MyISAM:性能优先(表锁)
- 行锁,大量的锁导致性能降低,表锁,一张表只有一把锁,提高性能。
查看当前存储引擎: show variables like ‘%storage_engine%’
指定存储引擎:
create table tb(
id int(4) auto_increment,
name varchar(5),
dept varchar(5),
primary key(id)
)ENGINE=MyISAM 选择存储引擎
AUTO_INCREMENT=1 设置自增步长
DEFAULT CHARSET=utf8 ;设置字符编码
mysql逻辑分层
执行流程: 客户端连接至数据库的连接层——>待执行的sql语句传入服务层,经 服务层进行sql优化——>选择当前的存储引擎——>由存储层存储数据
sql优化
树
b+ 树,数据只存在叶子结点上,非叶子结点的数据用于切割,数据的查询次数为n(树的高度)
索引
缺点:
- 本身需要占据一定空间
- 有些情况索引不适用
1、数据量少
2、频繁更新的字段(导致树的结构频繁改动)
3、很少使用的字段 - 会降低增删改的效率
优点:
- 提高查询效率(降低IO使用率)
- 降低CPU使用率(order by时 无需再排序)
类型 | 单值索引 | 唯一索引 | 复合索引 |
---|---|---|---|
单列,一个表可以有多个单值索引(name,age) | 数据列不能重复(id) | 多个列组成的索引(相当于二级目录) | |
创建索引 create 索引类型 索引名 on 表(字段) | create index age_index on person(age) ; | create unique index name_index on person(name) ; | create index age_name_index on person(age,name); |
方式二 alter table 表名 索引类型 索引名(字段) | alter table person add index age_index(age) ; | alter table person add unique index name_index(name); | alter table person add index age_name_index(age,name); |
删除索引 | drop index 索引名 on 表名 | ||
查询索引 | show index from 表名 |
执行计划(explain):
explain select * from token where appId = 100243;
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | token | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
编号 | 查询类型 | 表 | 索引类型 | 预测用到的索引 | 实际用到的索引 | 实际使用索引的长度 | 表之间的引用关系 | 通过索引查询到的数据量 | 额外信息 |
id值相同,从上往下顺序执行(顺序为查询过程中间值最小,即先取数据量小的表进行查询)。 id大的先执行(即先执行嵌套内部的语句) | PRIMARY:主查询(最外层查询) SUBQUERY:子查询 simple:简单查询(不包含子查询、union) derived:衍生查询(使用到临时表,子查询from中只有一个表/子查询from中union的左表) union:from子查询中 union的右表 | system > const > eq_ref > ref > range > index > all const:仅能查到一条数据,且是primary key或unique索引。 eq_ref:索引列是唯一值,查询结果数量等于表中总数量 | 预测用到的索引 | 实际用到的索引 | 用于判断复合索引是否被完全使用,utf8一个字符占三个字节,key_len结果是字节,可以为null占一字节,varchar标识占2字节 | 表示当前表所参照的字段(const表示常量) | 通过索引查询到的数据量 | using filesort:常见于order by语句,表示性能消耗大,需要额外一次排序(查询和排序使用不同的字段/复合索引时跨索引列)。using temporary:常见于group by语句,性能损耗大,用到了临时表。 using index:性能提升,覆盖索引,不需要回表查询,仅从索引表就能获取。**using where ** :需要回表 |
主从复制
授权
https://blog.csdn.net/lzpggg/article/details/4562439
https://www.cnblogs.com/bethal/p/5512755.html
配置
https://juejin.im/post/5c9d8109f265da612f1bb019
修改同步
https://blog.csdn.net/heng_ji/article/details/51013710
相关参数
https://blog.csdn.net/hao_yunfeng/article/details/82392261
函数
lag(列,偏移量) over()/** lead() over()查找同列数据**
https://www.begtut.com/mysql/mysql-lead-function.html
https://blog.csdn.net/weixin_38002569/article/details/83820525
rank() over(order by 列):同分数名次相同,但会占用下一排名
dense()_rank() over():同分数名次相同,不会占用下一排名
row_number() over:同分数名次不同
https://blog.csdn.net/weixin_43932609/article/details/107169618