1、选择最有效率的表名顺序
数据库的解析器按照从右到左的顺序处理from子句中的表名,from字句中写在最右边的表将最先被处理。在from字句中包含多个表的情况下,必须选择记录条数最少的表放在最后。
例如:查询员工的id、姓名、工资、部门号以及部门所在的区域号
select e.id,e.last_name,e.salary,d.id,r.id
form s_region r,s_dept d,s_emp e
where e.dept_id=d.id and d.region_id=r.id;
1) 如果3个表是完全无关系的话,将记录和列名最少的表卸载最后,依次类推
2)如果3个表示有关系的话,将引用最多的表放在最后,依次类推
2、where字句中的连接顺序
数据库采用自右而左的顺序解析where子句,根据这个原理,表之间的连接必须写在其他where条件之左,那些可以过滤掉最大数量记录的条件必须在where字句之
例如:查询工资大于1500的员工id、姓名和部门号
select e.id,e.last_name,e.salary,d.id
from s_dept d,s_emp e
where e.dept_id=d.id and e.salary>1500;
3、select字句中避免使用*号
数据库在解析的过程中,会将*依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费跟多的时间4、尽量使用多表查询
若使用子查询最终也会被转换成多表查询,同样会耗费时间
5、避免全表扫描
Where中少用NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE,它们会引起全表扫描。
6、用truncate替代delete
truncate属于ddl,不可回滚,表内容删除速度快;delete属于dml,可回滚,删除速度慢,需要逐条删除
7、尽量使用commit
因为commit会释放回滚点
8、尽量使用where语句代替having字句
因为where先执行而having后执行
9、尽量使用表和列的别名