Ⅰ 優化sql有什麼方法
在資料庫應用系統中編寫可執行的SQL語句可以有多種方式實現,但哪一條是最佳方案卻難以確定。為了解決這一問題,有必要對SQL實施優化。簡單地說,SQL語句的優化就是將性能低下的SQL語句轉換成達到同樣目的的性能更好的SQL語句。
優化SQL語句的原因
資料庫系統的生命周期可以分成: 設計、開發和成品三個階段。在設計階段進行優化的成本最低,收益最大。在成品階段進行優化的成本最高,收益最小。如果將一個資料庫系統比喻成一座樓房,在樓房建好後進行矯正往往成本很高而收效很小(甚至可能根本無法矯正),而在樓房設計、生產階段控制好每塊磚瓦的質量就能達到花費小而見效高的目的。
為了獲得最大效益,人們常需要對資料庫進行優化。資料庫的優化通常可以通過對網路、硬體、操作系統、資料庫參數和應用程序的優化來進行。根據統計,對網路、硬體、操作系統、資料庫參數進行優化所獲得的性能提升全部加起來只佔資料庫應用系統性能提升的40%左右,其餘60%的系統性能提升全部來自對應用程序的優化。許多優化專家甚至認為對應用程序的優化可以得到80%的系統性能提升。因此可以肯定,通過優化應用程序來對資料庫系統進行優化能獲得更大的收益。
對應用程序的優化通常可分為兩個方面: 源代碼的優化和SQL語句的優化。由於涉及到對程序邏輯的改變,源代碼的優化在時間成本和風險上代價很高(尤其是對正在使用中的系統進行優化) 。另一方面,源代碼的優化對資料庫系統性能的提升收效有限,因為應用程序對資料庫的操作最終要表現為SQL語句對資料庫的操作。
對SQL語句進行優化有以下一些直接原因:
1. SQL語句是對資料庫(數據) 進行操作的惟一途徑,應用程序的執行最終要歸結為SQL語句的執行,SQL語句的效率對資料庫系統的性能起到了決定性的作用。
2. SQL語句消耗了70%~90%的資料庫資源。
3. SQL語句獨立於程序設計邏輯,對SQL語句進行優化不會影響程序邏輯,相對於對程序源代碼的優化,對SQL語句的優化在時間成本和風險上的代價都很低。
4. SQL語句可以有不同的寫法,不同的寫法在性能上的差異可能很大。
5. SQL語句易學,難精通。SQL語句的性能往往同實際運行系統的資料庫結構、記錄數量等有關,不存在普遍適用的規律來提升性能。
傳統的優化方法
SQL程序人員在傳統上採用手工重寫來對SQL語句進行優化。這主要依靠DBA或資深程序員對SQL語句執行計劃的分析,依靠經驗,嘗試重寫SQL語句,然後對結果和性能進行比較以試圖找到性能較佳的SQL語句。這種做法存在著以下不足:
1. 無法找出SQL語句的所有可能寫法。很可能花費了大量的時間也無法找到性能較佳的SQL語句。即便找到了某個性能較佳的SQL語句也無法知道是否存在性能更好的寫法。
2. 非常依賴於人的經驗,經驗的多寡往往決定了優化後SQL語句的性能。
3. 非常耗時間。重寫-->校驗正確性-->比較性能,這一循環過程需要大量的時間。
根據傳統的SQL優化工具的功能,人們一般將優化工具分為以下三代產品:
第一代的SQL優化工具是執行計劃分析工具。這類工具對輸入的SQL語句從資料庫提取執行計劃,並解釋執行計劃中關鍵字的含義。
第二代的SQL優化工具只能提供增加索引的建議,它通過對輸入的SQL語句的執行計劃的分析來產生是否要增加索引的建議。這類工具存在著致命的缺點——只分析了一條SQL語句就得出增加某個索引的結論,根本不理會(實際上也無法評估到)增加的索引對整體資料庫系統性能的影響。
第三代工具是利用人工智慧實現自動SQL優化。
人工智慧自動SQL優化
隨著人工智慧技術的發展和在資料庫優化領域應用的深入,在20世紀90年代末優化技術取得了突破性的進展,出現了人工智慧自動SQL優化。人工智慧自動SQL優化的本質就是藉助人工智慧技術,自動對SQL語句進行重寫,找到性能最好的等效SQL語句。LECCO SQL Expert就採用了這種人工智慧技術,其SQL Expert支持Oracle、Sybase、MS SQL Server和IBM DB2資料庫平台。其突出特點是自動優化SQL語句。除此以外,還可以以人工智慧知識庫「反饋式搜索引擎」來重寫SQL語句,並找出所有等效的SQL語句及可能的執行計劃,通過測試運行為應用程序和資料庫自動找到性能最好的SQL語句,提供微秒級的計時; 能夠優化Web應用程序和有大量用戶的在線事務處理中運行時間很短的SQL語句; 能通過比較源SQL和待選SQL的不同之處,為開發人員提供「邊做邊學式訓練」,迅速提高開發人員的SQL編程技能等等。
該工具針對資料庫應用的開發和維護階段提供了數個特別的模塊:SQL語法優化器、PL/SQL集成化開發調試環境(IDE)、掃描器、資料庫監視器等。其核心模塊之一「SQL 語法優化器」的工作原理大致如下:輸入一條源SQL語句,「人工智慧反饋式搜索引擎」對輸入的SQL語句結合檢測到的資料庫結構和索引進行重寫,產生N條等效的SQL語句輸出,產生的N條等效SQL語句再送入「人工智慧反饋式搜索引擎」進行重寫,直至無法產生新的輸出或搜索限額滿,接下來對輸出的SQL語句進行過濾,選出具有不同執行計劃的SQL語句(不同的執行計劃意味著不同的執行效率),最後,對得到的SQL語句進行批量測試,找出性能最好的SQL語句(參見下圖)。
圖 人工智慧自動SQL優化示意圖
LECCO SQL Expert不僅能夠找到最佳的SQL語句,它所提供的「邊做邊學式訓練」還能夠教會開發人員和資料庫管理員如何寫出性能最好的SQL語句。LECCO SQL Expert的SQL語句自動優化功能使SQL的優化變得極其簡單,只要能夠寫出SQL語句,它就能幫開發人員找到最好性能的寫法。
小 結
SQL語句是資料庫應用中一個非常關鍵的部分,它執行性能的高低直接影響著應用程序的運行效率。正因為如此,人們在SQL語句的優化上投入了很大的精力,出現了許多SQL語句優化工具。隨著人工智慧等相關技術的日益成熟, 肯定還會有更多更好的工具出現,這將會給開發人員提供更多的幫助。
Ⅱ 圖書管理系統 C# SQL 成品 (高分!!!!!)
我發一個給你。
Ⅲ sql查詢問題
新建一個表B 欄位為Id(自增變數 不用管),bil_id(用來管理表A裡面的bil_id 3為成品 3為半成品),bil_Name(當bil_id為2時 此欄位為成品 3是為半成品)
sql: select A.*,B.bil_Name from A left outer join B on A.bil_id = B.bil_id
Ⅳ 這個SQL語句怎麼寫
select ID號,供應商,物品名稱-原材料,單價-原材料,數量-原材料,金額-原材料,客戶,物品名稱-成品,單價-成品,數量-成品,金額-成品 from 采購表 join 銷售表 on 采購表.id=銷售表.id
Ⅳ SQL 更新表中訂單號 更新訂單號 如果成品編號相同那麼訂單號也要相同
以成品編號做為條件更新就可以了啊
Ⅵ 求一份sql資料庫成品
--創建表
create table aaaa ( a1 char(2),b1 varchar(5) ,c3 datetime)
--增加一條記錄
insert into aaaa (a1,b1,c3) values('01','語文',getdate())
--再增加一條記錄
insert into aaaa (a1,b1,c3) values('02','數學',getdate())
--修改記錄數據
update aaaa set b1='英語' where a1='01'
--刪除記錄
delete from aaaa where a1='01'
--按照條件查詢
select * from aaaa where a1='02'
Ⅶ sql 問題
select 設備,sum(數量) as 數量之和
from table1
where substring(日期,1,1)='1'
group by 設備,事務
having 事務='成品'
Ⅷ 產成品入庫單、銷售出庫單在SQL資料庫中表名叫什麼
rdrecord主表,rdrecords子表,但要注意單據類別.
Ⅸ 求一份帶sql資料庫的成品網站
到站長之家,源代碼之家找找,肯定有。或者找mdb資料庫也可以,自己搭建使用更加簡單,資料庫的語法類似可以通用,也就是mdb升遷到sql也可以,程序不需要改動
Ⅹ 求一份SQL資料庫成品
加我q,發給你。或者留下你的qq。注意數字中間加幾個漢字,以免被系統隱藏掉