機動靈活 思考SQL語句

2021-08-28 02:40:35 字數 1169 閱讀 4149

關係理論只關心如何根據條件去取得正確的資料集。

關係操作

階段只負責準確無誤的找出屬於最終資料集的記錄,而不同行的相同欄位的關係並不是在這個階段處理,而是完全屬於排序操作。

關係理論並不涉及各種統計功能(例如百分位數等),關係理論所研究的是集合,並不涉及如何為這些集合排序。

sql 與優化器

當sql引擎處理查詢時,會用優化器找出執行查詢最高效的方式。優化器借助關係理論。

優化器會檢查下列因素:定義了哪些索引、資料的物理布局、可用記憶體的大小,以及可用於執行查詢任務的處理器數。

優化器還很重視查詢直接或間接設計的表和索引的資料量。

以關係理論為支柱的優化器主要用於關係操作層。

sql原本就是一種宣告性語言。sql應該用來表達要怎什麼,而不是如何來做。從要做什麼到如何來做的任務就是優化器來完成的。

查詢用了order by為結果集排序,而一旦用了排序操作,該資料集就已經不是關係了(關係是無序的)

關係操作層完成盡量多的工作。因為關係操作層的執行可以優化。

sql藝術的五大要素:

獲得結果集所需訪問的資料量。

定義結果集所需的查詢條件。

結果集的大小。

獲得結果集所涉及的表的數量。

多少使用者會同時修改這些資料。

1資料總量

必須訪問的資料總量,是要考慮的重要因素。沒有確定目標總量之前,很難斷定查詢執行的效率。

2.定義結果集的查詢條件

3.結果集的大小

無論何時,只要查詢有可能返回零結果集時,都應該先檢查那個最大可能導致空結果集的條件---尤其是在該檢查執行非常快捷時。

4.表的數量

sql時一種宣告性語言,用它來說明想要什麼,並讓dbms予以執行。

大資料量查詢

select ... from a,b,c,d,e1 where       and    union select ... from a,b,c,d,e2 where       and

這類查詢是典型的照搬式程式設計。為了提高效率,可以僅對**中非共用的表(本例中即e1,e2)使用union,然後配合篩選條件,把union語句降級為內嵌檢視。

select ... from a,b,c,d,(select from e1 where      union select ... from e2 where )  e         where