mysql

排序和分组

有distinct、order by和group by子句的查询,中间结果集限制10000行以内

对于大结果集(中间结果集超过10000行)的排序、分组放到程序端实现

事务

事务中INSERT|UPDATE|DELETE|REPLACE语句操作的行数控制在2000,以及WHERE子句中IN列表的传参个数控制在2000

批量操作数据时,需要控制事务处理间隔时间,进行必要的sleep,具体值由DBA给出,并且程序必须有中断处理能力

对于有auto_increment属性字段的表的插入操作,并发需要控制在200以内

SQL级别/事务级别/主从数据库中的表存储引擎类型要一致,存储引擎混合使用会导致主从数据不一致或主从同步中断(但涉及InfoBright表的情况除外)

对于同步延迟不敏感的只读查询,必须放到从库上执行;对于同步延迟敏感的只读查询,可以放到主库上执行

前端程序中禁止使用set语句,包括set names、set sql_mode和set isolation_level等

多表联合查询

多表连接查询推荐使用别名,且SELECT列表中要用别名引用字段,数据库.表格式,如“select a.cid  from iknow_qb. tblreply a where …”

生产系统中,单个查询中不推荐将3张表以上(包括3张表)做连接

生产系统中,强烈不推荐使用外关联,包括左外关联,右外关联和全外关联

在多表连接的查询中,驱动表须要选择结果集较小的表

禁止写成多层子查询嵌套的SQL语句,推荐改写成表顺序连接的格式

禁止在INSERT|UPDATE|DELETE|REPLACE语句中进行多表连接操作

SELECT语句

SELECT语句必须指定具体字段名称,禁止写成“*”

SELECT语句禁止使用UNION,推荐使用UNION ALL,并且UNION子句个数限制在5个以内

posted @ 2014-10-15 15:04  乡村猫  阅读(162)  评论(0编辑  收藏  举报