1.对于并发性的SQL

少用(不用)多表操作(子查询,联合查询),而是将复杂的SQL拆分多次执行。如果查询很原子(很小),会增加查询缓存的利用率。

2.大量数据的插入

多条 insert或者Load data into table(从文件里载入数据到表里)

建议,先关闭约束及索引,完成数据插入,再重新生成索引及约束。

针对于myisam,步骤:

Alter table table_name disable keys; 禁用索引约束

大量的插入

Alter table table_name enable keys; 启用

针对innodb,步骤:

Drop index, drop constraint 删除索引及约束,要保留主键

Begin transaction|set autocommit=0; 开启事务,不让他自动提交

[数据本身已经按照主键值排序]

大量的插入

Commit;

Add index, add constraint

3.分页

分页假定Limit offset, size; size = 10;

Page

offset

5

40, 10

50

490, 10

5000

4990, 10

500000

499990, 10

 

Limit 的使用,会大大提升无效数据的检索(被跳过),因为是先检索,检索会检索全部,再取得想要的。好的做法是使用条件等过滤方式,将检索到的数据尽可能精确定位到需要的数据上。

4.随机选一些数据,不要使用Order by Rand()

上面的查询,会导致每条记录都执行rand(),成本很高!

个人建议,通过mt_rand(),先确定的随机主键,再从数据表中获取数据。

推荐阅读:

APM性能调优/全链路压测解决方案