1-查询模糊匹配,少用like ‘%_%’。
a)修改前台程序,把查询条件的供应商名称一栏由文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就定位到具体供应商,后台调用程序时直接用“=”关联。
b)直接修改后台,根据输入的条件,先查出符合条件的供应商,把相关记录保存到一个临时表,再用临时表做复杂关联。
2-索引问题。
创建索引能加快查询速度。
法则:不要在简历的索引的数据列上进行如下操作:
a)避免对索引字段进行计算操作。
b)避免在索引字段上使用 not,<>,!=。
c)避免在索引列上使用IS NULL和IS NOT NULL。
d)避免在索引列上出现数据类型转换。
e)避免在索引字段上使用函数。
f)避免简历索引的列中使用空值。
3-复杂操作,拆分简单。
部分update、select语句写得很复杂(经常嵌套多子集查询)——可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作。
4-update(整合在一起)。
同一个表的修改在一个过程里出现了好几十次。可以整合在一个update语句中完成。
5-在可以使用union all的语句里使用了union。
union:两个集合相加。字段排序,排重。
union all:两个集合相加。字段不排序,不排重。
6-在where语句种,避免对索引字段计算操作。
7-where中避免用in,not in,or,having,不要以字符格式声明数字,要以数字声明字符。(日期同样)否则会使索引无效,产生全表扫描。
in,not in用exist,not exist代替。
a)例子select * from orders where customer_name not in(select customer_name from customer);
优化select * from orders where customer_name not exist(select customer_name from customer);
b)使用select emp.ename, emp.job from emp where emp.empno=7369;
不要使用select emp.ename, emp.job from emp where emp.empno='7369';
8-对select语句的法则,少用select *。
9-排序,避免耗费资源。
distinct,union,minus,intersect,order by会启动SQL引擎,耗费资源的排序功能。
distinct需要一次排序,而其他的至少需要两次排序。
10-慎用临时表,可以提高性能。