【转】关于sql的书写

 

先提提大原则

1)优化更需要的优化 说明:执行对系统影响更大的QUERY,一般指的是高并发,执行更加频繁的SQL)

2)定位优化对象性能瓶颈

3)明确优化目标

4)explain 写sql语句必须要使用explain

5)profile

6)小结果集驱动大结果集

7)尽可能在索引中完成排序

8)只取自己需要的字段

9)仅仅使用最有效的过滤条件

10)尽可能避免复杂的JOIN和子查询

 

说说我们自己的小规定:

一条sql语句能搞死一个数据库,继而搞死整站 !!

1.索引以idx开始+组成索引字段命名,如 idxusertype (userid, type)

2.innodb都需要有一个主键

3.联合索引最前缀原则 select * from table where a=? and b=? and c=?

4.相似性高的不要建联合索引如appkey 直接where gid=xx order by mgsid;

5.别忘了order by createtime;加索引或联合索引,这种一般是后来产品要求的。

6.别走count了,走计数器。

7.严禁foreach sql

8.越简单越好,多查几次都行。

9.索引数不宜过多.5000千万数据,一个索引可能增加5个G存储空间。

一个上亿表加个索引得加一下午甚至一天。

10.复杂的表查询从产品层面解决

11. 又排序又取计数。 双写。采取双写,读计数时走计数器,读排序时走order by 联合索引。

12.一个页面一次请求sql语句复杂的不超过10个,简单的不超过5个。第二次再减半

13.灵活运用索引。如order by createtime没有索引时用order by id代替

14.in 语句不能过多,不能超过50个。

15.杜绝用SQLCALCFOUNDROWS,left join,group by 等

16.程序中杜绝order by 一个变量及变量中传值再组装 一个方法一个sql语句,不要千变万化,衍生出多个

17.不要用函数

19.取in的排序用php程序排,不要findin_set

20.order by 走不上索引的走搜索.数据表结构不满足的走搜索或统计

22.delete,update也要有索引

23.limit值单独处理,作限制。不要 limit 1000万,5;

posted @ 2013-05-22 11:47  Gcoder  阅读(157)  评论(0编辑  收藏  举报