使用docker拉取mysq镜像
docker pull mysql:5.7
运行
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
进入容器,执行mysql
docker -it exec "容器id" /bin/bash
mysql -u root -p123456 -h 192.168.23.129 -P 3306
查看状态
show status;
注意三条数据主要 Queries(当前发生了几次查询) Threads_connected(有几个线程过来连接了)Threads_running(有几个进程正在工作)
显示连接的工作状态
show processlist;
列类型选择
- 优先级 整形>data,time>enum>char,varchar>blob
- 初始值合理
- 避免null
索引优化策略
btree索引(排好序的快速查找结构)
hash 索引v
开启慢sql记录
将 slow_query_log 全局变量设置为“ON”状态
set global slow_query_log='ON';
设置慢查询日志存放的位置
set global slow_query_log_file='/usr/local/mysql/data/slow.log';
查询超过1秒就记录
set global long_query_time=1;
查询慢sql相关
show variables like 'slow_query%';
使用查询缓存优化查询
1:SELECT username FROM user WHERE signup_date >= CURDATE()
2:SELECT username FROM user WHERE signup_date >= '2014-06-24‘
上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存
使用EXPLAIN关键字检测查询
当只要一行数据时使用LIMIT 1
只去自己需要的column,避免使用SELECT
添加索引(主键索引/唯一索引/全文索引/普通索引)
- 主键索引添加
- 普通索引
- 创建全文索引 (FULLTEXT索引的内容可以使用MATCH()…AGAINST语法进行查询)
- 唯一索引(当表的某列被指定为unique约束时,这列就是一个唯一索引)