MySQL使用总结
MySQL使用总结
Mysql创建数据库
|
|
使用utf8mb4而不是utf8 ,应为utf8的长度不确定,utf8编码占用3个字节,utf8mb4能保证长度的够用, 5.5.3 版本以后的mysql版本开始支持utf8mb4
Mysql导入导出
-
导出所有库
1
mysqldump -uusername -ppassword --all-databases>all.sql
-
导入所有库
1
mysql>source all.sql;
-
导出某些库
1
mysqldump -uusername -ppassword --databases db1 db2 >db1db2.sql
-
导入某些库
1
mysql>source db1db2.sql
-
导入某个库
1
mysql -uusername -ppassword db1<db1.sql; mysql>source db1.sql;
-
导出某个库
1
mysqldump -uusername -ppassword db1 table1 table2>tb1tb2.sql
-
导入某些数据表
1 2 3
mysql -uusername -ppassword db1<tb1tb2.sql mysql>user db1; mysql>source tb1tb2.sql;
-
mysqldump字符集设置
1
$mysqldump -uusername -ppassword --default-character-set=utf-8 db1 table1>tb1.sql
Mysql用户管理
- 创建用户
1 2
mysql> insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234")); mysql>grant all privileges on *.* to jee@localhost identified by ‘123′;
- 修改用户密码
1 2
mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’; mysql> FLUSH PRIVILEGES;
- 显示当前用户
1
mysql>select USER();
- 第一次启用用户
进入到/etc/mysql/debian.cnf查看用户名和密码()后临时登录到mysql shell,运行一下命令,设置root用的密码为123456。
1 2 3 4 5 6
use mysql; // 下面这句命令有点长,请注意。 update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost'; update user set plugin="mysql_native_password"; flush privileges; quit;
mysql大小写敏感配置
- 查看
1
show global variables like '%lower_case%'
- 配置
1 2 3
#0-大小写敏感,1-不敏感(先把表名转为小写,再执行操作)。 lower_case_table_names = 0 或lower_case_table_names =1 #my.cnf文件下
Mysql启用远程
|
|
Mysql 主从复制
- mysql复制的用途:
- 读取扩展
- 主备份服务器
- 故障转移服务器
- 地理空间冗余
- 数据仓库
- 基准测试
- 软件更新
- 复制配置(my.cnf):
- 主服务器配置(Alpha)
|
|
测试MySQL复制
在alpha上测试下面的代码:
|
|
确认从服务器上什么都不存在:
|
|
Mysql 创建视图
|
|
ubuntu mysql5.7解决不用密码也能登陆:
|
|
on,where,having的区别
on,where,having这三个都可以加条件的子句中,on是最先执行,where次之,having最后.有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的.但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的. 根据上面的分析,可以知道where应该比having快一点,应为它过滤数据后才进行sum,所以having是最慢的.但也不是说having没用,因为有时在步骤三还没有出来都不知道那个记录才符合要求时,就要用having了. left join加上where 条件
用where是先连接然后再筛选
用and是先筛选再连接
数据库范式:
第一范式:强调的是列的原子性.
第二范式:首先使1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分.
第三范式:首先是2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖.即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况.
查询优化
- jvm调优,内存结构
- 内存碎片问题
MajorGC是清理老年代 MinorGC是从年轻代空间(包括Eden和Survivor区域)回收内存。 FullGC是清理整个堆空间包括年轻代和老年代。 - mysql执行计划,查询慢
- MySQL查询优化:
- 查询性能衡量标准
- 查询时间
- 慢查询(几乎所有大道秒级别的查询都可以认为比较慢)
- 执行计划
- type查询的方式
- key使用的索引
- Rows结果集大小
- Extra提示信息
- 影响查询性能的因素
- SQL解析时间#使用prepared stmt语句减少重复SQL的解析
- 查询优化算法
- 执行计划分析
- 索引优化
- 表优化(建主键unsigned int)
- 表优化(字段尽量使用NOT NULL)
- 表优化(能使用enum的尽量不要使用varchar)
- 表优化(ip字段使用unsigned int并使用INET_NTOA和INET_ATON)
- 索引优化(为频繁搜索的字段建立索引)
- 索引优化(为varchar text建立全文索引,避免使用 like)
- 索引优化(避免使用blob字段,该字段只能建立前缀索引)
- 索引优化(最多匹配原则和最高区分度原则)
- 查询优化
- 索引字段不参与计算,否则索引失效
- 避免使用 select*,select count(*)等
- 知道结果数量的使用,使用limit,尽早结果过程。
- Query Cache的使用#关了吧
- 磁盘IO次数#IO优化,增大buffer pool,开取MRR,避免select *
- 事务键锁的影响#锁优化:避免使用大事务,RC比RR好,不适用GAP锁,避免使用select *,可能会锁权标
- join优化#利用index nexted-loop join算法,在没有索引的情况下,合理设置join_buffer_size.
- 走索引OR全表扫描
- 结果集大小与运算过程
- 查询计划分析
- 查询优化技巧
MySQL执行计划
|
|
执行计划包含的信息
|
|
从最好到最差的连接类型为const、eq_reg、ref、range、index和AL mysql explain用法和结果的含义:https://www.cnblogs.com/yycc/p/7338894.html MYSQL 5.6.3以前只能EXPLAIN SELECT; MYSQL5.6.3以后就可以EXPLAIN SELECT,UPDATE,DELETE
不走索引情况
|
|