Sql语句书写的十大原则

 费德  2016/09/05 11:00  253 次
  • 原则1:尽量避免在列上进行运算,这样会导致原语句失效,例如原语句为:

select * from table where YEAR(d) >= 2011;

优化为:

select * from table where d >= 2011-01-01;
  • 原则2:尽量避免使用join连接查询多个表的数据,如果你一定要使用,

也应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query语句

  • 原则3:注意like的使用,避免% % ,例如原句为:

select * from table where name like '%de%';

优化为:

select * from table where name >= 'de' AND name <= 'df';
  • 原则4:仅列出需要查询的字段,这样不会提高查询的速度,而是节约内存,例如原句为:

select * from user;

优化为:

select name,avatar from user ;
  • 原则5:使用批量插入语句,节省交互,例如原句为:

insert into user values('Fade','default.jpg');
insert into user values('Sunshine','default.jpg');

优化为:

insert into user values('Fade','default.jpg'),('Sunshine','default.jpg');
  • 原则6:limit的基础比较大时,使用between,例如原句为:

select * from user limit 1000000,10;

优化为:

select * from user where id between 1000000,1000010 order by id; 

注意:如果id是不连续的,则可能会产生问题。

  • 原则7:不要使用rand语句返回多条随机数据,下面的语句为在首页每个分类显示随机的四件商品。

    SELECT FROM tp_commodity AS t1 JOIN (SELECT ROUND(RAND() ((SELECT MAX(id) FROM tp_commodity WHERE category_id = 1)-(SELECT MIN(id) FROM tp_commodity WHERE category_id = 1))+(SELECT MIN(id) FROM tp_commodity WHERE category_id = 1)) AS id) AS t2 WHERE t1.id >= t2.id and t1.category_id = {$category_id} ORDER BY t1.id LIMIT 4";

  • 原则8:避免使用null,因为null会使索引或者查询等操作都变得更加复杂,降低效率。

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

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

 作者:费德

少年费德的奇幻漂流

本博客如无特殊说明皆为原创,转载请注明来源:Sql语句书写的十大原则

添加新评论