mysql基础调优
1.避免未命中索引
1.避免在 where 子句中使用!=或<>操作符
2.在 where 及 order by 涉及的列上建立索引
3.不要 select id from t where num is null
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
5.少用左%
6.能用between就不要in
7.对字段用函数会无法命中索引
8.不要 where substring(name,1,3)=’abc’ ,可以 where name like ‘abc%
2.其他
1.不要 select num from a where num in(select num from b)
可以 select num from a where exists(select 1 from b where num=a.num)
2.开启查询缓存
// 查询缓存不开启
$r=mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");
// 开启查询缓存
$today=date("Y-m-d");
$r=mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
3.只有一行时用limit1
4.join表的时候相同的字段都建立索引
5.把IP地址存成 UNSIGNED INT ,方便between。
6.避免在整个表上使用count(*),它可能锁住整张表.
7.千万不要 ORDER BY RAND() ,可以先去除总数取随机数再limit x ,1
3.查询原理
回头总结一下MySQL整个查询执行过程,总的来说分为6个步骤:
1.客户端向MySQL服务器发送一条查询请求
2.服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段
3.服务器进行SQL解析、预处理、再由优化器生成对应的执行计划
4.MySQL根据执行计划,调用存储引擎的API来执行查询
5.将结果返回给客户端,同时缓存查询结果
网友评论