本文共 1224 字,大约阅读时间需要 4 分钟。
MySQL
查看数据库是否开启了慢查询日志SHOW VARIABLES LIKE 'slow_query_log';查看数据库是否将未使用索引的SQL记录到日志中SHOW VARIABLES LIKE 'log_queries_not_using_indexes';查看慢查询日志记录的慢查询日志时间SHOW VARIABLES LIKE 'log_query_time';查看慢查询日志文件存放位置SHOW VARIABLES LIKE 'slow_query_log_file';设置MySQL数据库开启慢查询日志SET GLOBAL slow_query_log = on;设置慢查询日志文件存储位置SET GLOBAL slow_query_log_file='';打开慢查询日志存储为设置索引的SQLSET GLOBAL log_queries_not_using_indexes = on;设置记录的慢查询日志超时时间SET GLOBAL log_query_time = 1;慢查询日志的存储格式#time: 查询的开始时间#user@host: 查询主机用户信息#query_time: SQL的执行信息#set timestamp: SQL执行时间#select concat :执行的SQL语句
mysqldumpslow -h
1.发现查询次数多且占用时间长的SQL(多:使用基于内存的数据库或使用缓存,长:优化SQL语句)2.未命中索引的SQL(优化SQL语句添加特定索引优化)
列 | id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |
---|---|---|---|---|---|---|---|---|---|---|
说明 | 查询id | 查询类型 | 使用的表 | 类型 | 可能使用的索引 | 应用索引 | 索引长度 | 引用 | 返回行数 | 扩展说明 |
在where从句,group by从句,order by从句,on从句中出现的的列创建索引。索引列的字段长度越小越好。离散度大的列放到联合索引的前面。
1.避免使用重复及冗余的索引2.去掉因业务变更,未使用的索引
设计表以最小化磁盘空间,尽量使用最小化的数据大小来存储数据。
1.选择合适类型的数据类型,存储数据2.使用可以存下你的数据的最小数据类型3.尽可能使用简单的数据类型4.尽可能使用not null定义字段,采用默认值方式5.尽量少使用text类型,非用不可时最好使用分表的方式6.数据库中不要存储二进制文本,图片,音频等数据。而要存储数据的网络路径7.使用反范式化设计,设计一定的冗余字段,以减少多表联合查询。
转载地址:http://nzfna.baihongyu.com/