1:explain sql 在mysql5.6 下无论是insert/update/delete 都是可以的
2:show create table tbname
3:只导出表结构
mysqldump -uroot -p'password' --no-data 库名> database.sql
4: show index from tablename;
##一般一个表上最多有5个索引
5:show table status like '表名'; ##对于平均长度和行数而言myisam是准确的,innodb是个约数
6:show global/session status like 'created_tmp_%table'; ##变量名
7:pt-query-digest 进行慢查询日志分析
8:时间统计
>set profing=1;
>show profile for query 1;
9:select sql_no_cache; ##表示不使用cache
例如:
10:mysql下一个连接就是一个线程
11:show full processlist;
12:不使用query cache ##设置set的时候,务必要修改/etc/my.cnf
>set global query_cache=0;
>set global query_cache_size=0;
13:innodb & tokudb
innodb: 数据安全性,并发性完胜myisam
tokudb:非常适合写入密集型,占用空间少的情景,支持ACID
14:mysql隔离级别建议修改为transaction_isolation
15:query cache mysql5.6下默认是关闭的,
建议关闭
16:mysql备份通过percona Xtrabackup 是最好的备份方式
17:大sql 拆分成小sql,因为sql也只能在1核上计算,大sql很容易把db读死
18:不要使用select * 或尽量少用
19:秒杀使用redis 做队列,删除的时候用limit
20:批量插入数据使用load data ,尽量不要使用insert into select ......
21: 尽量使用非null
22: 通过外键去关联
23: 一般不同时使用myisam和innodb 引擎
24:show session/global status like 'handler_read%';
handler_read_key 1 表示使用了1个索引
handler_read_next 7 表示索引被用来读取7行数据
handler_read_priv 71 表示这个索引从反方向读取了71行数据
25:General log :sql日志,用于记录所有的sql
set global general_log=1;
set global log_output='table';
开启这个,日志量会比较大,早晨磁盘大量的写入一般不要在生产环境下启用
26:慢查询日志
[mysqld]
slow_query_log=1
slow_query_log_file=filename
long_query_time=0.2
log_output=FILE
27: 二进制日志
[mysqld]
log_bin=文件名
从mysql5.1 开始可以指定row或mixed 为二进制文件格式
28:show full processlist;
29: show engine innodb status \G ##查引擎状态
下面是优化的相关内容
1:整合ddl
将多条alter语句整合成1条sql是一种简单的优化
2:去掉重复的索引
pt-duplicate-key-checker
3:删除不用的索引
pt-index-usage
4:监控无效的索引,通过key_len
5:常见数据类型优化
5.1:bigint&int---最多到43亿
5.2:存储ip地址 varchar(16) VS unsigned int
5.3:Datetime 占8个自己,timestamp占4个字节
5.4:ENUM适合存储静态类型,例如:性别
5.5:用char(32)保存MD5 值,固 定长度使用char而非varchar
6:不要使用select *
7:mysql query cache 禁掉
8:应用程序使用memcached或redis缓存,记得更新表的时候,同时更新缓存!
9:计数器或排行榜使用redis来实现
10:写入峰值,热点事件引发写入峰值,业务现象,主库负载高,相应慢,从库延迟
解决方法:batch insert
通过insert into table values (x),(y),(z);
每次写入50个value! ##这个是合理的值!
11:烦人的大分页
select * from table where x=1 order by time limit 1000000,10;
修改为
select * from table where pk in (select pk from table where x=1 order by time limit 1000000,10)
12:避免长尾连接引发的雪崩 pt-kill
阅读(1046) | 评论(0) | 转发(0) |