①使用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
存储引擎
myisam
如果表对事务要求不高,同时是以查询和添加为主的,我们考虑使用
myisam存储引擎比如bbs中的 发帖表,回复表.
innodb
对事务要求高,保存的数据都是重要数据,我们建议使用INNODB,比如订单表,账号表.
memory
比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory,速度极快.(如果mysql重启的话,数据就不存在了)
MyISAM和INNODB的区别
1.事务安全(MyISAM不支持事务,INNODB支持事务)
2.查询和添加速度(MyISAM批量插入速度快)
3.支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)
4.锁机制(MyISAM时表锁,innodb是行锁)
5.外键MyISAM不支持外键,INNODB支持外键. (在PHP开发中,通常不设置外键,通常是在程序中保证数据的一致)
Myisam注意事项
如果你的数据库的存储引擎是myisam,请一定记住要定时进行碎片整理
看下面的例子
-- 新建一张表 设置存储引擎为myisamcreate table test100(id int unsigned ,name varchar(32))engine=myisam
去我们mysql的配置文件所指向的内存数据
可以看到这时候的大小是0KB,接着我们新添加两条数据
-- 新添加两条数据insert into test100 values(1,'aaaaa');insert into test100 values(2,'bbbb');
再去看看大小
这时候变成了1KB
-- 再删除test100的数据delete from test100;
但是再去刚才的那个文件看下 其实文件大小并没有改变。也就是说数据并没有完全删除掉,这样就比较耗内存了
所以 我们需要定时对碎片进行整理
-- 整理碎片optimize table test100;
再去看看文件的大小
发现已经删除了。
备份sql文件
cmd控制台:在环境变量中配置mysql环境变量
mysqldump –u -账号 –密码 数据库[表名1 表名2..] >文件路径
案例mysqldump -u - root -proot test >d:\temp.sql
可以看到已经备份了
至于还原的话,写一个bat文件即可