SQL的別名和SQL的執行順序和SQL優化

致敬原文:https://www.cnblogs.com/cindy-cindy/p/6798010.html

SQL的別名

1、不可以在where子句中使用列名的別名,即select name t from emp where t>2999;是不允許的

2、使用別名的好處:

提高SQL的易讀性

提高SQL的解析執行效率

語法檢查

語義檢查

共享池檢查

生成執行樹

執行

3、SQL的硬解析和軟解析?

SQL的執行順序

1、from語句–where語句–group by語句–having語句–select語句–order by語句

rownum的使用

select * from emp rownum<=2 /查找emp表的前兩條記錄/

select * from (select rownum t,ename from emp) m

where m.t>=5 and m.t<=10 /查詢某個範圍的記錄,先查詢出rownum並保存爲臨時表m,再進行查詢/

where和having的區別?

where對分組前的小組內的詳細信息進行過濾

having對分組後的信息進行過濾

內連接,外連接,自連接?

SQL優化(這裏可以借鑑)

1、避免使用select * ,而是具體指出選擇哪些列

2、SQL大小寫,數據庫在解析sql時,先把SQL語句轉換爲大寫,再進行解析操作,所以建議直接提供大寫的SQL語句。

3、過濾時,>和>=,使用>=優先,如a>2000和a>=2001,這樣可以避免過濾2000和2001之間的小數,可以調高效率

4、where子句中,不等於判斷會使索引失效。

5、where子句中,對列做運算,例如,加減乘除,會使索隱列失效。所以儘量不要在索隱列上做操作。

6、模糊查詢時,like “%abc%”,前模糊會導致索引失效,後模糊不會導致索引失效。

7、in和exists的區別?

1、in適合內表小外表大的情況,select * from emp where emp.deptno in (select deptno from dept)

2、exists適合外表小內表大的情況.如此運用可提升效率

注:由於兩者對錶的連接方式不同,導致以上區分,in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。

8、not in 和 not exists 用法同上

9、某些情況下可以使用exists替換distinct。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章