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_i
nesrted,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)ig
nore index
MysqL>desc select * from t1 ig
nore 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)用 t
runcate 来
删除 MysqL> t
runcate table t2; Query OK,0 rows affected (0.00 sec) #用两种
方法都可以把表中数据清空,但是用第二种明显比第一种速度要快,而且节省内存.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。