當前位置:首頁 » 編程語言 » 關於sql的參考文獻
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

關於sql的參考文獻

發布時間: 2023-02-09 22:05:42

A. 求sql資料庫論文

ORACLE中SQL查詢優化研究

摘 要 資料庫性能問題一直是決策者及技術人員共同關注的焦點,影響資料庫性能的一個重要因素就是SQL查詢語句的低效率。論文首先分析了導致SQL查詢語句性能低下的四個常見原因以及SQL調優的一般步驟,然後分別針對如何降低I/O操作、在查詢語句中如何避免對查詢結果的高成本操作以及在多表連接時如何提高查詢效率進行了分析。
關鍵詞 ORACLE;SQL;優化;連接

1 引言
隨著網路應用不斷發展,系統性能已越來越引起決策者的重視。影響系統性能的因素很多,低效的SQL語句就是其中一個不可忽視的重要原因。論文首先分析導致SQL性能低下的常見原因,然後分析SQL調優應遵循的一般步驟,最後從如何降低I/O、避免對查詢結果的高成本操作和多表連接中如何提高SQL性能進行了研究。鑒於目前ORACLE在資料庫市場上的主導地位,論文將只針對ORACLE進行討論。
2 影響SQL性能的原因
影響SQL性能的因素很多,如初始化參數設置不合理、導入了不準確的系統及模式統計數據從而影響優化程序(CBO)的正確判斷等,這些往往和DBA密切相關。純粹從SQL語句出發,筆者認為影響SQL性能不外乎以下四個重要原因:
(1)在大記錄集上進行高成本操作,如使用了引起排序的謂詞等。
(2)過多的I/O操作(含物理I/O與邏輯I/O),最典型的就是未建立恰當的索引,導致對查詢表進行全表掃描。
(3)處理了太多的無用記錄,如在多表連接時過濾條件位置不當導致中間結果集包含了太多的無用記錄。
(4)未充分利用資料庫提供的功能,如查詢的並行化處理等。
第(4)個原因處理起來相對簡單。論文將針對前三個原因論述如何提高SQL查詢語句的性能。
3 SQL優化的一般步驟
SQL優化一般需經過發現問題、分析問題、提出解決措施、應用措施、測試性能幾個步驟,如圖1所示。「發現問題就是解決問題的一半」,因此在SQL調優過程中,定位問題SQL是非常重要的一步,一般可藉助於ORACLE自帶的性能優化工具如STATSPACK、TKPROF、AUTOTRACE等輔助用戶進行,同時還應該重視動態性能視圖如V$SQL、V$MYSTAT、V$SYSSTAT等的研究。

圖1 SQL優化的一般步驟
4 SQL語句的優化
4.1 優化排序操作
排序的成本十分高昂,當在查詢語句中使用了引起結果集排序的謂詞時,SQL性能必然受到影響。
4.1.1 排序過程分析
當待排序數據集不是太大時,伺服器在內存(排序區)完成排序操作,如果排序需要更多的內存空間,伺服器將進行如下處理:
(1) 將數據分成多個小的集合,對每一集合進行排序。
(2) 伺服器向磁碟申請臨時空間,將排好序的中間結果寫入臨時段,再對另外的集合進行排序。
(3) 在所有的集合均排好序後,伺服器再將它們進行合並得到最終的結果,如果排序區尺寸太小,合並無法一次完成時,將分多次進行。
從上述分析可知,排序是一種十分昂貴的操作,它消耗大量的CPU時間和內存,觸發磁碟分頁和交換操作,因此只要有可能,我們就應該在SQL語句中盡量避免排序操作。
4.1.2 SQL中引起排序的操作
SQL查詢語句中引起排序的操作大致有:ORDER BY 和GROUP BY 從句;DISTINCT修飾符;UNION、INTERSECT、MINUS集合操作符;多表連接時的排序合並連接(SORT MERGE JOIN)等。
4.1.3 如何避免排序
1)建立恰當的索引
對經常進行排序和連接操作的欄位建立索引。在建立索引後,當伺服器向這些欄位發出排序請求時,將直接引用索引而不進行排序操作;當進行等值連接查詢操作時,若建立連接的欄位未建立索引,伺服器進行的是排序合並連接(SORT MERGE JOIN),連接操作的過程如下:
對進行連接的兩個或多個表分別進行全掃描;
對每一個表中的行集分別進行全排序;
合並排序結果。
如果建立連接的欄位已建立索引,伺服器進行嵌套循環連接(NESTED LOOP JOINS),該連接方式不需要任何排序,其過程如下:
對驅動表進行全表掃描;
對返回的每一行利用連接欄位值實施索引惟一掃描;
利用從索引掃描中返回的ROWID值在從表中定位記錄;
合並主、從表中的匹配記錄。
因此,建立索引可避免多數排序操作。
2)用UNIION ALL替換UNION
UNION在進行表鏈接後會篩選掉重復的記錄,所以在表鏈接後會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。大部分應用中是不會產生重復記錄的,最常見的是過程表與歷史表UNION 。因此,採用UNION ALL操作符替代UNION,因為UNION ALL操作只是簡單的將兩個結果合並後就返回。
4.2 優化I/O
過多的I/O操作會佔用CPU時間、消耗大量內存和佔用過多的栓鎖,因此有必要對SQL的I/O進行優化。優化I/O的最有效方式就是用索引掃描代替全表掃描。
4.2.1 應用基於函數的索引
基於函數的索引(FUNCTION BASED INDEX,簡記為FBI)提供了索引計算列並在查詢中使用這些索引的能力。FBI的實質是對查詢所需中間結果進行預處理。如果一個FBI與查詢語句中的內嵌函數完全匹配,CBO在生成查詢計劃時,將自動啟用索引范圍掃描(INDEX RANGE SCAN)替換全表掃描(FULL TABLE SCAN)。考察下面的代碼段並用AUTOTRACE觀察創建FBI前後執行計劃的變化。
select * from emp where upper(ename)=』SCOTT』
創建FBI前,很明顯是全表掃描。
Execution Plan
……
1 0 TABLE ACCESS (FULL) OF 'EMPLOYEES' (Cost=2 Card=1 Bytes=22)
idle>CREATE INDEX EMP_UPPER_FIRST_NAME ON EMPLOYEES(UPPER(FIRST_NAME));
索引已創建。
再次運行相同查詢,
Execution Plan
……
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMPLOYEES' (Cost=1 Card=1 Bytes=22)
2 1 INDEX (RANGE SCAN) OF 'EMP_UPPER_FIRST_NAME' (NON-UNIQUE) (Cost=1 Card=1)
這一簡單的例子充分說明了FBI在SQL查詢優化中的作用。FBI所用的函數可以是用戶自己創建的函數,該函數越復雜,基於該函數創建FBI對SQL查詢性能的優化作用越明顯。
4.2.2 應用物化視圖和查詢重寫
物化視圖是一個預計算結果集,其中通常包含聚集與多表連接等復雜操作。資料庫自動維護物化視圖,且隨用戶的要求進行刷新。查詢重寫機制就是用資料庫中的替代對象(如物化視圖)將用戶提交的查詢重寫為完全不同但功能等價的查詢。查詢重寫對用戶透明,用戶完全按常規編寫訪問資料庫的查詢語句,優化程序(CBO)自動決定是否對用戶提交的查詢進行重寫。查詢重寫是提高查詢性能的一種非常有效的方法,尤其是在數據倉庫環境中針對匯總、多表連接以及其它高成本的操作方面。
下面以一個非常簡單的例子來演示物化視圖和查詢重寫在優化SQL查詢性能方面的作用。
select dept.deptno,dept.dname,count(*)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dept.dname
查詢計劃及主要統計數據如下:
執行計劃:
-----------------------------------------
……
2 1 HASH JOIN (Cost=5 Card=14 Bytes=224)
3 2 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=52)
4 2 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=42)
主要統計數據:
-----------------------------------------
305 recursive calls
46 consistent gets
創建物化視圖EMP_DEPT:
create materialized view emp_dept build immediate
refresh on demand
enable query rewrite
as
select dept.deptno,dept.dname,count(*)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dept.dname
/
再次執行查詢,執行計劃及主要統計數據如下:
執行計劃:
-------------------------------------
……
1 0 TABLE ACCESS (FULL) OF 'EMP_DEPT' (Cost=2 Card=327 Bytes=11445)
主要統計數據:
------------------------------------
79 recursive calls
28 consistent gets
可見,在建立物化視圖之前,首先執行兩個表的全表掃描,然後進行HASH連接,再進行分組排序和選擇操作;而建立物化視圖後,CBO自動將上述復雜操作轉換為對物化視圖EMP_DEPT的全掃描,相關的統計數據也有了很大的改善,遞歸調用(RECURSIVE CALLS)由305降到79,邏輯I/O(CONSISTENT GETS)由46降為28。
4.2.3 將頻繁訪問的小表讀入CACHE
邏輯I/O總是快於物理I/O。如果資料庫中存在被應用程序頻繁訪問的小表,可將這些表強行讀入KEEP池,從而避免物理I/O的發生。
4.3 多表連接優化
最能體現查詢復雜性的就是多表連接,多表連接操作往往要耗費大量的CPU時間和內存,因此多表連接查詢性能優化往往是SQL優化的重點與難點。
4.3.1 消除外部連接
通過消除外部連接,不僅使得到的查詢更易於讀取,而且性能也經常可以得到改善。一般的思路是,有以下形式的查詢:
SELECT …,OUTER_JOINED_TABLE.COLUMN
FROM SOME_TABLE,OUTER_JOINED_TO_TABLE
WHERE …=OUTER_JOINED_TO_TABLE(+)
可轉換為如下形式的查詢:
SELECT …,(SELECT COLUMN FROM OUTER_ JOINED_TO_TABLE WHERE …)FROM SOME_TABLE;
4.3.2 謂詞前推,優化中間結果
多表連接的性能低下多數是因為連接操作與過濾操作的次序不合理,大多數用戶在編寫多表連接查詢時,總是先進行連接操作再應用過濾條件,這導致伺服器做了太多的無用功。針對這類問題,其優化思路就是盡可能將過濾謂詞前推,使不符合條件的記錄提前被篩選掉,只對符合條件的少數記錄進行連接處理,這樣可成倍的提高SQL查詢效能。

標准連接查詢如下:
Select a.prod_name,sum(b.sale_quant),
sum(c.sale_quant),sum(d.sale_quant)
From proct a,tele_sale b,online_sale c,store_sale d
Where a.prod_id=b.prod_id and a.prod_id=c.prod_id
and a.prod_id=d.prod_id And a.order_date>sysdate-90
Group by a.prod_id;
啟用內嵌視圖,且將條件a.order_date>sysdate-90前移,優化後代碼如下:
Select a.prod_name,b.tele_sale_sum,c.online_sale_sum,d.store_sale_sum From proct a,
(select sum(sal_quant) tele_sale_sum from proct,tele_sale
Where proct.order_date>sysdate-90 and proct.prod_id =tele_sale.prod_id) b,
(select sum(sal_quant) online_sale_sum
from proct,tele_sale
Where proct.order_date>sysdate-90 and proct.prod_id =online_sale.prod_id) c,
(select sum(sal_quant) store_sale_sum
from proct,store_sale
Where proct.order_date>sysdate-90 and proct.prod_id =store_sale.prod_id) d,
Where a.prod_id=b.prod_id and
a.prod_id=c.prod_id and a.prod_id=d.prod_id;
5 結束語
SQL語言在資料庫應用中佔有非常重要的地位,其性能的優劣直接影響著整個信息系統的可用性。論文從影響SQL性能的最主要的三個方面入手,分析了如何優化SQL查詢的I/O、避免高成本的排序操作和優化多表連接。需要強調的一點是,理解SQL語句所解決的問題比SQL調優本身更重要,因此SQL調優需要系統分析人員、開發人員和資料庫管理員密切協作。
參考文獻
[1]Thomas Kyte.Effective Oracle by Design:Design and Build High-performance Oracle Application[M],The McGral- Hill Companies,Inc,2003
[2]Kevin Loney,George Koch,Oracle 9i:The Complete Reference[M],The McGral-Hill Companies,Inc,2002
[3] Oracle9i SQL Reference release 2(9.2)[OL/M],2002.10. http://www.oracle.com/technology/
[4] Oracle9i Data Warehousing Guide release 2(9.2) [OL/M],2002.03. http://www.oracle.com/technology/
[5]Alexey Danchenkov,Donald Burleson,Oracle Tuning:The Definitive Reference[OL/M],Rampant Techpress,2006.
[6] Oracle9i Database Concepts release 2(9.2) [OL/M],2002.08. http://www.oracle.com/technology/
[7] Oracle9i supplied plsql packages and types reference release 2(9.2) [OL/M],2002.12. http://www.oracle.com/ technology/

B. 求一份《SQL Sever的應用》畢業論文

1、論文題目:要求准確、簡練、醒目、新穎。
2、目錄:目錄是論文中主要段落的簡表。(短篇論文不必列目錄)
3、提要:是文章主要內容的摘錄,要求短、精、完整。字數少可幾十字,多不超過三百字為宜。
4、關鍵詞或主題詞:關鍵詞是從論文的題名、提要和正文中選取出來的,是對表述論文的中心內容有實質意義的詞彙。關鍵詞是用作機系統標引論文內容特徵的詞語,便於信息系統匯集,以供讀者檢索。 每篇論文一般選取3-8個詞彙作為關鍵詞,另起一行,排在「提要」的左下方。
主題詞是經過規范化的詞,在確定主題詞時,要對論文進行主題,依照標引和組配規則轉換成主題詞表中的規范詞語。
5、論文正文:
(1)引言:引言又稱前言、序言和導言,用在論文的開頭。 引言一般要概括地寫出作者意圖,說明選題的目的和意義, 並指出論文寫作的范圍。引言要短小精悍、緊扣主題。
〈2)論文正文:正文是論文的主體,正文應包括論點、論據、 論證過程和結論。主體部分包括以下內容:
a.提出-論點;
b.分析問題-論據和論證;
c.解決問題-論證與步驟;
d.結論。
6、一篇論文的參考文獻是將論文在和寫作中可參考或引證的主要文獻資料,列於論文的末尾。參考文獻應另起一頁,標注方式按《GB7714-87文後參考文獻著錄規則》進行。
中文:標題--作者--出版物信息(版地、版者、版期):作者--標題--出版物信息所列參考文獻的要求是:
(1)所列參考文獻應是正式出版物,以便讀者考證。
(2)所列舉的參考文獻要標明序號、著作或文章的標題、作者、出版物信息。

C. 我需要mysql資料庫參考文獻

首先必須登錄美國空間後台的網站控制面板, 既然有帶mysql資料庫, 我估計應該也有提供PHPMyAdmin功能, 通過PHPMyAdmin你必須先創建一個mysql資料庫, 創建時須填寫mysql資料庫名字, 用戶名字和密碼 (這些資...

D. 關於SQL SERVER2000的參考文獻拜託了各位 謝謝

李昆,SQL SERVER2000課程設計案例精編,北京:中國水利水電出版社,2006 何文華, SQL Server 2000 應用開發教程,北京:電子工業出版社出版,2007 仝春靈,資料庫原理與應用—SQL Server 2000,北京:電子工業出版社,20 夠了吧 哎~都是被畢業論文逼得

E. 什麼是 SQL

SQL
維基網路,自由的網路全書
SQL全稱是「結構化查詢語言(Structured Query Language)」,是資料庫中使用的標准數據查詢語言,IBM公司最早使用在其開發的資料庫系統中,1986年10月,美國ANSI對SQL進行規范後作為關系資料庫管理系統的標准語言(ANSI X3. 135-1986),1987年得到國際標准化組織的支持成為國際標准。不過各種通行的資料庫系統在實現過程中都對SQL規范作了某些擴充,所以實際上不同的資料庫系統的SQL語言不能完全相互通用。

SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的SQL語言作為數據輸入與管理的介面。它以記錄集合作為操縱對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語言可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的一個單獨事件只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。

SQL同時也是資料庫文件格式的擴展名。

SQL語言包含4個部分:

數據查詢語言(SELECT語句)
數據操縱語言(INSERT, UPDATE, DELETE語句)
數據定義語言(如CREATE, DROP等語句)
數據控制語言(如COMMIT, ROLLBACK等語句)
取自"http://zh.wikipedia.org/wiki/SQL"

參考文獻:http://zh.wikipedia.org/wiki/SQL