【PHP核心技术与最佳实践】学习笔记(一)

Robin 61次浏览

摘要:mysql基本语句优化10原则。

原则1:尽量避免在列上进行运算,这样会导致索引失效。例:

select * from t where year(d) >= 2011;

优化为:

select * from t where d >= '2011-01-01';

原则2:使用JOIN时,应该用小结果集驱动大结果集。同事把复杂的JOIN查询拆分成多个Query。因为JOIN多个表时,可能导致更多的锁定和堵塞。例如:

select * from a join b on a.id = b.id
left join c on c.time = a.date
left join d on c.pid = b.aid
left join e on e.cid = a.did

原则3:注意LIKE模糊查询的使用,避免%%。例如:

select * from t where name like '%de%'

优化为:

select * from t where name >= 'de' and name <= 'df'

原则4:仅列出需要查询的字段,这对速度不会有明显影响,主要考虑节省内存。例如:

select * from user;

优化为:

select id, name, pwd from user;

原则5:使用批量插入语句节省交互。例如:

insert into t (id, name) values(1, 'a');
insert into t (id, name) values(2, 'b');
insert into t (id, name) values(3, 'c');
insert into t (id, name) values(4, 'd');

优化为:

insert into t (id, name) values(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd');

原则6:LIMIT的基数比较大时使用between。例如:

select * from article order by id limit 1000000, 10;

优化为:

select * from article where id between 1000000 and 1000010 order by id;

原则7:不要使用rand函数获取多条随机记录。例如:

select * from table order by rand() limit 20;

优化为:

select * from table as t1 join (select round (rand() * ((select max(id) from table) - (select min(id) from table)) + (select min(id) from table)) as id) as t2 where t1.id >= t2.id order byt1.id limit 1;

这里是获取一条随机记录,这样即使执行20次,也比原来的语句高效。或者使用php产生随机数,然后给mysql去查询。

原则8:避免使用NULL。

原则9:不要使用count(id),而应该使用count(*)。

原则10:不要做无谓的排序操作,而应尽可能在索引中完成排序。


原创文章转载请注明出处。

相关文章

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~