①利用group by 分组查询是,默认分组后,还会排序,可能会降落速率,
在group by 后面增加 order by null 就可以防止排序.
explain select from emp group by deptno order by null;

②有些情形下,可以利用连接来替代子查询。由于利用join,MySQL不须要在内存中创建临时表。
select from dept, emp where dept.deptno=emp.deptno; [大略处理办法]
select from dept left join emp on dept.deptno=emp.deptno; [左外连接,更ok!]
③对查询进行优化,要只管即便避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
应只管即便避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃利用索引而进行全表扫描,如:
select id from t where num is null
最好不要给数据库留 NULL,尽可能的利用 NOT NULL 填充数据库.
备注、描述、评论之类的可以设置为 NULL,其他的,最好不要利用 NULL。
不要以为 NULL 不须要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL 也包含在内),都是占用 100 个字符的空间的,如果是 varchar 这样的变长字段, null 不占用空间。
可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询:
select id from t where num = 0
更多mysql sql语句调优查看http://bbs.itmayiedu.com/article/1511164574773
MySQL数据引擎
利用的存储引擎 myisam / innodb/ memory
myisam 存储: 如果表对事务哀求不高,同时因此查询和添加为主的,我们考虑利用myisam存储引擎. ,比如 bbs 中的 发帖表,回答表.
INNODB 存储: 对事务哀求高,保存的数据都是主要数据,我们建议利用INNODB,比如订单表,账号表.
MyISAM 和 INNODB的差异
事务安全(MyISAM不支持事务,INNODB支持事务)查询和添加速度(MyISAM批量插入速率快)支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)锁机制(MyISAM时表锁,innodb是行锁)外键 MyISAM 不支持外键, INNODB支持外键. (在PHP开拓中,常日不设置外键,常日是在程序中担保数据的同等)Memory 存储,比如我们数据变革频繁,不须要入库,同时又频繁的查询和修正,我们考虑利用memory, 速率极快. (如果mysql重启的话,数据就不存在了)Myisam把稳事变
如果你的数据库的存储引擎是myisam,请一定记住要定时进行碎片整理
举例解释:
create table test100(id int unsigned ,name varchar(32))engine=myisam;
insert into test100 values(1,’aaaaa’);
insert into test100 values(2,’bbbb’);
insert into test100 values(3,’ccccc’);
我们该当定义对myisam进行整理
optimize table test100;
数据库数据备份
手动办法
cmd掌握台:
在环境变量中配置mysql环境变量
mysqldump –u -账号 –密码 数据库 [表名1 表名2…] > 文件路径
案例: mysqldump -u -root root test > d:\temp.sql
比如: 把temp数据库备份到 d:\temp.bak
mysqldump -u root -proot test > f:\temp.bak
如果你希望备份是,数据库的某几张表
mysqldump -u root -proot test dept > f:\temp.dept.sql
如何利用备份文件规复我们的数据.
mysql掌握台
source d:\temp.dept.bak
自动办法
把备份数据库的指令,写入到 bat文件, 然后通过任务管理器去定时调用 bat文件.
mytask.bat 内容是:
@echo offF:\path\mysqlanzhuang\bin\mysqldump -u root -proot test dept > f:\temp.dept.sql
创建实行操持任务实行脚本。