1 经常使用的优化策略
1.1 语句
1.1.1使用实际的列名
当我们查询SQL语句时。你是否觉得使用实际的列名比使用*更快呢?答案是肯定的。
为了证实这一点,感兴趣的朋友能够自己验证一下。我这里给出一个实例。
select * from user; --时间: 0.423ms</span>
select id,version,avatar,date_created,description,email,email_show ,enabled,first_name,last_name,last_updated,member_id,passwd ,user_real_name,user_style_id ,username,paypal_email_address ,transaction_fee_payer,pay_pal_email_address from user; --时间: 0.177ms
1.1.2 合理使用Having
要理解Having的使用含义,它仅使用在对全部查询到的行数进行过滤。即。它就是一个过滤器。
不要将Having用作其他目的。
SELECT subject, count(subject) FROM student_details WHERE subject != 'Science' AND subject != 'Maths' GROUP BY subject
取代以下不合理的使用方法:
SELECT subject, count(subject) FROM student_details GROUP BY subject HAVING subject!= 'Vancouver' AND subject!= 'Toronto'
1.1.3 降低子查询个数
降低子查询个数能够降低不必要的性能消耗。看看以下的这里简单实例。
SELECT name FROM employee WHERE (salary, age ) = (SELECT MAX (salary), MAX (age) FROM employee_details) AND dept = 'Electronics'
取代以下这个语句
SELECT name FROM employee WHERE salary = (SELECT MAX(salary) FROM employee_details) AND age = (SELECT MAX(age) FROM employee_details) AND emp_dept = 'Electronics'
经常使用的优化提示:
1.合理的使用Exits, In ,Joinkeyword。
2.In一般会减少SQL的运行效率,当过滤标准在字查询中时,In的使用会提高运行效率;当大部分的过滤标准在住查询中时。Exits运行效率比較高。
比方以下的这个样例:
Select *from product p where EXISTS (select 1 from order_items o where o.product_id = p.product_id)
取代以下这个SQL语句
Select * from product p where product_id IN (select product_id from order_items)
3 使用Exits替代 Distinct。
当表之间存在一对多的关系时,使用Exits会比使用Distinct效率更高。
SELECTd.dept_id, d.dept FROM dept d WHERE EXISTS ( SELECT 'X' FROM employee e WHEREe.dept = d.dept)
取代以下的SQL语句
SELECT DISTINCT d.dept_id, d.dept FROM dept d,employee e WHERE e.dept = e.dept
4 差别UNION ALL 和UNION的差异
5 优化where查询条件。
看以下的这个样例,比較中。你会发现性能的差异。
selectid,email,first_name,last_name from user where first_name like 'Sha%' --时间: 0.032ms</span>
<span style="font-size:18px;">selectid ,email ,first_name ,last_name from user where substr(first_name, 1, 3 ) ='Sha' --时间: 0.035ms
实例2
SELECT product_id, product_name FROM product WHERE unit_price BETWEEN MAX(unit_price) and MIN(unit_price)
取代以下的SQL语句
SELECT product_id, product_name FROM product WHERE unit_price >= MAX(unit_price) and unit_price <= MIN(unit_price)
1.1.4 使用 DECODE
使用Decode函数避免扫描同样的行或者连接反复同样的表。Decode常使用在Group By的SQL语句中。
SELECT idFROM employee WHERE nameLIKE 'Ramesh%' andlocation = 'Bangalore'
代替以下SQL语句
SELECT DECODE(location,'Bangalore',id,NULL) id FROMemployee WHERE name LIKE 'Ramesh%'
版权声明:本文博主原创文章,博客,未经同意不得转载。