mysql日常优化细节
时间:2022-03-15 08:33
# sql语句优化
>
1)使用limit限制一次性查询出的数据量
2)链接查询代替子查询
3)尽量不要使用select * ,将需要查找的字段列出来
4)如果数据量特别大的话尽量将一条复杂的sql拆分成多个sql完成功能
5)...
# 选择合适的数据类型
> (1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob
(2)使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。如,int类型存储时间类型,bigint类型转ip函数
(3)使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar
(4)尽可能使用not null定义字段
(5)尽量少用text,非用不可最好分表
# 选择合适的索引列
> (1)查询频繁的列,在where,group by,order by,on从句中出现的列
(2)where条件中<,<=,=,>,>=,between,in,以及like 字符串+通配符(%)出现的列
(3)长度小的列,索引字段越小越好,因为数据库的存储单位是页,一页中能存下的数据越多越好
(4)离散度大(不同的值多)的列,放在联合索引前面。查看离散度,通过统计不同的列值来实现,count越大,离散程度越高:
```
mysql> SELECT COUNT(DISTINCT column_name) FROM table_name;
```
# 学会使用命令分析数据库
## SHOW查看状态
```
mysql> SHOW [SESSION|GLOBAL] STATUS LIKE ‘%Status_name%‘;
session(默认):取出当前窗口的执行
global:从mysql启动到现在
```
> 查看查询次数(插入次数com_insert、修改次数com_insert、删除次数com_delete)
```
mysql> SHOW STATUS LIKE ‘com_select‘;
```
> 查看连接数(登录次数)
```
mysql> SHOW STATUS LIKE ‘connections‘;
```
> 数据库运行时间
```
mysql> SHOW STATUS LIKE ‘uptime‘;
```
> 查看慢查询次数
```
mysql> SHOW STATUS LIKE ‘slow_queries‘;
```
> 查看索引使用的情况:
```
mysql> SHOW STATUS LIKE ‘handler_read%‘;
- handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
- handler_read_rnd_next:这个值越高,说明查询低效。
```
## 显示系统变量
```
mysql> SHOW VARIABLES LIKE ‘%Variables_name%‘;
```
## 显示InnoDB存储引擎的状态
```
mysql> SHOW ENGINE INNODB STATUS;
```
... 持续补充中