1.对查询进行优化,应尽量避免全表扫描

MATCHES和LIKE关键字,
where子句中对字段进行null值判断,
where子句中使用!=或<>操作符,
where子句中使用 or 来连接条件,
in 和 not in 关键字,
where子句中对字段进行表达式操作,
where子句中对字段进行函数操作,
以上均会造成全表搜索,应尽量避免。

2.很多时候用 exists 代替 in 是一个好的选择

3.最先出现的条件一定要排除最多结果的条件

比如:数据库有100条信息,查询语句(where a>* and b>*),其中(where a>*)能排除80条信息,(where b>*)能排除10条信息,则(a>*)在前,(b>*)在后;如果(where a>*)能排除20条信息,(where b>*)能排除50条信息,则(b>*)在前,(a>*)在后,为(where b>* and a>*)。

4.可以以where条件的先后顺序和order by来建立联合索引

5.避免或简化排序

应当简化或避免对大型表进行重复的排序。为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

6.避免相关子查询

一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

7.避免通配符匹配

MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。

8.使用临时表加速查询

把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。

9.用排序来取代非顺序存取

10.尽量避免使用游标,因为游标的效率较差

11.尽量避免大事务操作,提高系统并发能力

12.尽量避免向客户端返回大数据量