分类目录

链接

2012年七月
« 6月   8月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

近期文章

热门标签

博主推荐

现在位置:    首页 > SQL Server > 正文
SQL优化经验总结6
SQL Server 暂无评论 阅读(1,695)

低效: (索引失效)

 

SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;

 

高效: (索引有效)

 

 

SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;

 

(27) 总是使用索引的第一个列:

 

如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 这也是一条简单而重要的规则,当仅引用索引的第二个列时,优化器使用了全表扫描而忽略了索引

 

28) 用UNION-ALL 替换UNION ( 如果有可能的话):

 

当SQL 语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序. 如果用UNION ALL替代UNION, 这样排序就不是必要了. 效率就会因此得到提高. 需要注意的是,UNION ALL 将重复输出两个结果集合中相同记录. 因此各位还是要从业务需求分析使用UNION ALL的可行性. UNION 将对结果集合排序,这个操作会使用到SORT_AREA_SIZE这块内存. 对于这块内存的优化也是相当重要的. 下面的SQL可以用来查询排序的消耗量

 

低效:

 

 

SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'

 

高效:

 

 

SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION ALL
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'

 

(29) 用WHERE替代ORDER BY:

 

ORDER BY 子句只在两种严格的条件下使用索引.

本文版权归数据库之家所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:SQL优化经验总结6 | 数据库之家

发表评论

留言无头像?