1. 不同表的同一字段要有相同的類型,比如t_audit_report表的claim_id為varchar2類型,而t_claim表的該字段為number型,這樣會導緻2個表關聯使用claim_id關聯的時候,使用不了索引。
2. 盡量使用UNION ALL,而不是UNION
3. 避免寫過于複雜的SQL,不一定要一個SQL解決問題,可以考慮使用多個小的SQL語句來實作同樣的功能。
4. 查詢盡量用确定的列名,少用*
5. 将in子句替換成exists子句
6. 使用NOT EXISTS替代NOT IN
7. 外鍵需要加索引,否則删除父表的記錄時會導緻子表上的全表鎖。
8. 删除不必要的索引
9. 添加備援字段,減少大表的關聯
10. 避免在索引列上使用函數,如果無法避免,可以添加函數索引,在寫SQL語句時,需要使用一緻的函數。比如系統中對t_user表的字段account有的地方使用lower函數,有的地方卻使用upper函數。
11. 如果明細查詢語句很複雜,統計語句不要重用明細查詢語句。因為統計語句不需要查詢詳細資訊,可以去掉很多表的關聯。
12. 如下情況下,Oracle不會使用索引,我們應該避免
l 在索引列上使用前置通配符
l 在索引列上使用NOT
l 在索引列上使用IS NULL和IS NOT NULL
l 索引列的類型自動轉換
<b>其他</b>
1. 在寫代碼時,注重性能的同時不要忽略可讀性.
2. 是否考慮過修改需求來提升性能?
3. 是否考慮過修改程式的設計來提高性能?
本文轉自 珏石頭 51CTO部落格,原文連結:http://blog.51cto.com/gavinshaw/936068,如需轉載請自行聯系原作者