sql语句简单优化

1、选择最有效率的表名顺序

数据库的解析器按照从右到左的顺序处理from子句中的表名,from字句中写在最右边的表将最先被处理。在from字句中包含多个表的情况下,必须选择记录条数最少的表放在最后。

如果有3个以上的表做连接查询,那就需要选择哪个被其他表所引用的表放在最后;

例如:查询员工的id、姓名、工资、部门号以及部门所在的区域号

[sql]  view plain  copy
  1. select e.id,e.last_name,e.salary,d.id,r.id  
  2. form s_region r,s_dept d,s_emp e  
  3. where e.dept_id=d.id and d.region_id=r.id;  
1) 如果3个表是完全无关系的话,将记录和列名最少的表卸载最后,依次类推

2)如果3个表示有关系的话,将引用最多的表放在最后,依次类推

2、where字句中的连接顺序

数据库采用自右而左的顺序解析where子句,根据这个原理,表之间的连接必须写在其他where条件之左,那些可以过滤掉最大数量记录的条件必须在where字句之

例如:查询工资大于1500的员工id、姓名和部门号

[sql]  view plain  copy
  1. select e.id,e.last_name,e.salary,d.id  
  2. from s_dept d,s_emp e  
  3. 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、尽量使用表和列的别名

10、多使用内部函数提高效率

猜你喜欢

转载自blog.csdn.net/qq_30764991/article/details/80652705