mysql查询效率

来源:互联网 发布:护考必下的一款软件 编辑:程序博客网 时间:2024/06/13 23:52

如何提高查询效率:(前提都是查,不插入删除等,mysql数据库)

第一:改变引擎,不用innoDB,用mylSAM,

mylsam是mysql的存储引擎,mylsam不支持事务,也不支持外键,但其访问速度快,对事务完整性没有要求。

mylsam强调了快速读取操作,因此mysql受到web开发如此青睐的主要原因:在web开发中所进行的大量数据操作都是读取操作。

innoDB存储引擎提供了具有提交,回滚和崩溃恢复能力的事务安全。

第二:建立索引

1.对查询进行优化,应尽量避免全表扫描,首先考虑在where以及order by 涉及的列上建立索引

2.应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: 
select id from t where num is null 
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: 
select id from t where num=0 

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: 
select id from t where num=10 or num=20 
可以这样查询: 
select id from t where num=10 
union all 
select id from t where num=20 

6.in 和 not in 也要慎用,否则会导致全表扫描,如: 
select id from t where num in(1,2,3) 
对于连续的数值,能用 between 就不要用 in 了: 
select id from t where num between 1 and 3 

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: 
select id from t where substring(name,1,3)='abc'--name以abc开头的id 
select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'生成的id 
应改为: 
select id from t where name like 'abc%' (like的匹配字符%不要在关键字前面
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1' 

15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”

20.使用limit,这个,用户查询,我先显示前100条数据,这个自然是奇快无比的,当用户想继续看的时候,再查询后面的100条数据,这样,交互自然是没的说啦。

select * from tablename limit 2,4即取出第3条至第6条,4条记录

0 0
原创粉丝点击