mysql 优化学习

使用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;

列类型选择

  1. 优先级 整形>data,time>enum>char,varchar>blob
  2. 初始值合理
  3. 避免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

添加索引(主键索引/唯一索引/全文索引/普通索引)

  1. 主键索引添加
  2. 普通索引
  3. 创建全文索引 (FULLTEXT索引的内容可以使用MATCH()…AGAINST语法进行查询)
  4. 唯一索引(当表的某列被指定为unique约束时,这列就是一个唯一索引)
发布了34 篇原创文章 · 获赞 19 · 访问量 1474

猜你喜欢

转载自blog.csdn.net/qq_42236003/article/details/103920773