mysql 调试和优化

mysql 调试和优化 
1.调试 mysql 命令方法: mysql>explain select * from t1 \G 或: mysql>desc select * from t1 \G 主要查看以下属性: 
(1)type 是否用到索引 
(2)key 索引名称 
(3)rows 查询影响的行数(越少说明优化的越好) 
2.用 mysql 命令获得一些服务优化信息: 
(1)show status like 'com_%'; #主要看 com_select,com_insert,com_update,com_delete,查到都是本次服务启动后的会话结 果,当然其中包括所有的数据为存储类型 
(2)就想查看 innodb 的这些信息: show status like 'innodb_rows_%'; 主 要 查 看 innodb_rows_read,innodb_rows_inesrted,innodb_rows_updated,innodb_rows_deleted 这四个参数 
(3)show status like 'connections'; #查看连接 mysql 服务器的次数 
(4)show status like 'uptime'; #mysql 服务器的工作时间 
(5)show status like 'slow_queries'; #慢查询的次数 
3.索引优化问题: 
(1)一般的要加索引的字段为:where 后面字段 
(2)order by 后面的字段 
(3)like 后 3%这种形式而不是%3 这种形式 
(4)or 前后字段都要用到索引 
(5)复合索引的第一个字段 
(6)创建索引:mysql>create index ind_name on t1(name); 
(7)查看索引使用情况: mysql>show status like 'handler_read%'; #如果其中 handler_read_rnd_next 的值高则索引低效,需要去优化索引,而如果低则说明索引 高效. 
4.常用的 sql 表的导入导出优化: 
(1)mysql>alter table t1 disable keys mysql>load data infile 'c:/t1.txt'; mysql>alter table t1 enable keys; 
(2)mysql>set unique_checks=0; mysql>load data...; msyql>set unique_checks=1; 
(3)mysql>autocommit=0; mysql>load data...; mysql>autocommit=1; 
5.优化 insert 语句,最好用一行多值的这种形式: insert into t1(name) values(1),(2),(3) 
6.当一个文件装载一个表时,用 load data infile 要比很多 insert 语句快 20 倍,而 mysqlimport 这种导入也很快,因为它用的本来就是 load data infile 这种函数接口. 
7.查询包括 group by 但如何避免排序结果的消耗: mysql>desc select id from t1 group by id order by null \G 
8.优化嵌套查询: 
(1)mysql>desc select * from t1 where s_id not in (select id from comany2) \G 
(2)mysql>desc select * form t1 left join company2 on t1.s_id=comany2.id where t1.s_id is null \G #以上 left join 这种形式明显快于 not in ()这种子查询,因为 join 不需要在内存中建立临时表来 完成这个逻辑上需要两个步骤的查询工作. 
9.sql 索引提示: 
(1)use index mysql>desc select * from t1 use index (ind_id) where id=3 \G 
(2)ignore index mysql>desc select * from t1 ignore index (ind_id) where id=3\G 
(3)force index mysql>desc select * from t1 force index (ind_id) where id>0 \G #注意这种 where 后这种带范围判断的字段的索引是不起作用的,但可以人为的强制去用 index,虽然对影响 rows 起不到作用,这是 mysql 留给用户的一个自行选择计划的权力而已. 
10.与删除表有关的优化: 
1)用 delete 来删除 mysql> delete from t1; Query OK, 10 rows affected (0.01 sec) 
2)用 truncate 来删除 mysql> truncate table t2; Query OK, 0 rows affected (0.00 sec) #用两种方法都可以把表中数据清空,但是用第二种明显比第一种速度要快,而且节省内存. 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值