重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
北京航空航天大學空氣動力學比較好。
雨山網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)。
學校學術(shù)資源
館藏資源
截至2010年底,館藏印刷型書刊資料累計達249萬冊,引進數(shù)據(jù)庫總量達65個,電子圖書總量達163.3萬種,外文電子期刊達1.2萬種;圖書館加入了北京市、工業(yè)和信息化部和全國范圍內(nèi)的文獻保障體系,包括全國高校文獻保障系統(tǒng)(CALIS)、北京地區(qū)高校圖書館文獻資源保障體系(BALIS)、工信部七館聯(lián)席會、北京高校圖書館聯(lián)合體等,與國家圖書館、國家科技文獻中心、中科院文獻中心、北大、清華、人大、北師大等北京地區(qū)近80余所圖書館以及全國100余所高校圖書館實現(xiàn)了館際互借、資源共享。
學術(shù)期刊
《北京航空航天大學學報(社會科學版)》:《中國期刊全文數(shù)據(jù)庫( CJFD )》、《中國學術(shù)期刊中和評價數(shù)據(jù)庫》、《中文科技期刊數(shù)據(jù)庫》、《中國社會科學引文數(shù)據(jù)庫》、《中國科學引文數(shù)據(jù)庫》等多家數(shù)據(jù)庫的全文收錄期刊,RCCSE中國核心學術(shù)期刊。
《北京航空航天大學學報(自然科學版)》:Ei、CA、INSPEC、AJ、Aerospace(IAA、STAR)收錄期刊,中國自然科學技術(shù)核心期刊,是“中國科學引文數(shù)據(jù)庫”、“中國學術(shù)期刊綜合評價數(shù)據(jù)庫”、“中國導彈與航天文摘”、“中國數(shù)學文摘”、“中國物理文摘”等多家數(shù)據(jù)庫和檢索刊物的收錄刊源。
《單片機與嵌入式系統(tǒng)應用》
《復合材料學報》
《大學英語》
《航空知識》
《Propulsion and Power Research》
《Frontiers of Computer Science》
空氣動力學,是流體力學的一個分支,主要研究物體在空氣或其它氣體中運動時而產(chǎn)生各種力。空氣動力學為流體力學在工程上的應用力學,特別討論在馬赫數(shù)大于0.3的流場情形。
空氣動力學因為討論的狀況接近真實流體,考慮了真實流體的黏滯性、可壓縮性、三維運動等特點,所以得到的計算方程式比較復雜,通常為非線性的偏微分方程式形式。這種方程在絕大多數(shù)的情況下都難以求得解析解的,加之早期計算技術(shù)還比較落后,所以當時大多是以實驗的方式來求得所需的數(shù)據(jù)。
隨著計算機技術(shù)的迅速發(fā)展,使用計算機進行大量數(shù)值運算來求解空氣動力學方程式成為可能。利用數(shù)值法以及計算流體力學方法,可以求出非線性偏微分方程的數(shù)值解,得到所需要的各種數(shù)據(jù),從而省去了大量的實驗成本。由于數(shù)學模型的不斷完善以及計算機計算能力的不斷提高,現(xiàn)在已經(jīng)可以采用電腦模擬流場的方式來取代部分空氣動力學實驗。
因為市場上有許多的SQL管理工具,所以要為SQL項目管理選擇工具是一件有挑戰(zhàn)性的事。為大家推薦23款SQL工具的精選列表,希望朋友們喜歡。其中幾款已經(jīng)在昨天的SQL查詢優(yōu)化工具一文中,做過推薦。
Aqua Data Studio是一個功能豐富的通用SQL集成開發(fā)環(huán)境(IDE),它使數(shù)據(jù)庫開發(fā)人員,DBA和數(shù)據(jù)/業(yè)務分析人員能夠從單個界面開發(fā),管理和分析30多個平臺的數(shù)據(jù)。
特征:
dbForge Studio for SQL Server是一個功能強大的IDE,用于SQL Server管理,管理,開發(fā),數(shù)據(jù)報告,分析等等。執(zhí)行復雜數(shù)據(jù)庫任務的SQL開發(fā)人員和DBA可以使用GUI工具來加速幾乎所有數(shù)據(jù)庫體驗,例如設計數(shù)據(jù)庫,編寫SQL代碼,比較數(shù)據(jù)庫,同步模式和數(shù)據(jù),生成有意義的測試數(shù)據(jù)等等。
特征:
dbWatch是一個完整的數(shù)據(jù)庫監(jiān)控和管理解決方案,適用于SQL Server,Oracle,PostgreSQL,Sybase,MySQL和Azure。專為在大型內(nèi)部部署,混合或云數(shù)據(jù)庫環(huán)境中進行主動管理和日常維護自動化而設計。
特征:
Jet Profiler for MySQL是MySQL數(shù)據(jù)庫服務器的實時查詢性能和診斷工具。該工具自2009年開發(fā),非常穩(wěn)定。
特征:
Adminer是一個用于管理數(shù)據(jù)庫,表,關(guān)系,索引和用戶的SQL管理工具。它支持所有流行的數(shù)據(jù)庫管理系統(tǒng),如MySQL,PostgreSQL,SQLite,MS SQL,Oracle和MongoDB。
特征:
它是一種用于分析微軟SQL Server數(shù)據(jù)庫結(jié)構(gòu)差異的SQL管理工具。它允許比較數(shù)據(jù)庫對象,如表,列,索引,外鍵,模式等。
特征:
EMS SQL Manager允許用戶創(chuàng)建和編輯SQL Server數(shù)據(jù)庫對象,并創(chuàng)建,修改,執(zhí)行和保存SQL查詢。
特征:
它是一個基于JAVA的數(shù)據(jù)庫管理工具。這種符合JDBC的SQL管理工具允許用戶查看數(shù)據(jù)庫結(jié)構(gòu)并發(fā)出SQL命令。它還支持Firebird,微軟Access,微軟SQL Server,MySQL,Oracle,Sybase等數(shù)據(jù)庫。
特征:
SQLite Database Browser是一個開源SQL工具,允許用戶創(chuàng)建,設計和編輯SQLite數(shù)據(jù)庫文件。它允許用戶顯示由它們和應用本身發(fā)出的所有SQL命令的日志。
特征:
DBeaver是一個面向開發(fā)人員和數(shù)據(jù)庫管理員的開源數(shù)據(jù)庫工具。它支持JDBC兼容的數(shù)據(jù)庫,如MySQL,Oracle,IBM DB2,SQL Server,F(xiàn)irebird,SQLite和Sybase。
特征:
DbVisualizer Free是一個SQL管理工具。它允許用戶管理各種數(shù)據(jù)庫,包括Oracle,Sybase,SQL Server,MySQL,Informix,H3和SQLite。
特征:
HeidiSQL是另一種可靠的SQL管理工具。它使用流行的MySQL服務器,微軟SQL數(shù)據(jù)庫和PostgreSQL設計。它允許用戶瀏覽和編輯數(shù)據(jù),創(chuàng)建和編輯表,視圖,觸發(fā)器和預定事件。
特征:
FlySpeed SQL Query是所有數(shù)據(jù)庫用戶和開發(fā)人員的數(shù)據(jù)處理工具。它允許用戶在不熟悉SQL語法的情況下在不同的數(shù)據(jù)庫服務器上構(gòu)建查詢。
特征:
SQL Diagnostic Manager是Idera開發(fā)的性能監(jiān)控工具。它提供診斷解決方案,幫助用戶評估其SQL Server中的運行狀況和性能。
特征:
ManageEngine開發(fā)的免費SQL性能監(jiān)控工具。它允許用戶密切關(guān)注SQL Server性能!此工具還可以幫助用戶監(jiān)控SQL Server的性能和可用性。它可以與MS SQL 2012和2014等所有MS SQL版本一起使用。
特征:
ApexSQL Monitor是一個基于Web的SQL管理應用程序。它為監(jiān)控多個SQL Server實例提供支持。
特征:
適用于微軟SQL Server的AppDynamics數(shù)據(jù)庫管理產(chǎn)品的一種全面SQL工具。它用于監(jiān)控SQL Server的2000,2005,2008,2012和2014版本。
特征:
Toad是另一個SQL Server DBMS工具。它通過廣泛的自動化,直觀的工作流程和內(nèi)置的專業(yè)知識最大化了生產(chǎn)力。此SQL管理工具可解決問題,管理更改并提升最高級別的代碼質(zhì)量。
特征:
Zenoss提供ZenPacks來管理微軟SQL Server,MySQL,Oracle數(shù)據(jù)庫和PostgreSQL。每個ZenPack都具有每個平臺的特定功能,并提供可用的API來確定應監(jiān)控的內(nèi)容。
特征:
Lepide的SQL Server Storage Manager是一個用于分析SQL Server性能的開源實用程序。它提供了對存儲空間和性能的完全可視性。
特征:
SQL Server Management Studio Express是一個用于訪問,管理和開發(fā)SQL所有組件的開源工具。此工具支持SQL Server的大多數(shù)管理任務。
特征:
SolarWinds Database Performance Analyzer是用于數(shù)據(jù)庫管理的性能監(jiān)視和分析工具。它還找出了瓶頸的原因并降低了數(shù)據(jù)庫操作的總體成本。
特征:
Sequel Pro是一款快速,易用的數(shù)據(jù)庫管理工具,適用于MySQL。此SQL管理工具有助于與數(shù)據(jù)庫進行交互。使用此軟件添加新數(shù)據(jù)庫,添加新表,添加新行和任何其他類型的數(shù)據(jù)庫也很容易。
特征:
實例講解MYSQL數(shù)據(jù)庫的查詢優(yōu)化技術(shù)
作者:佚名 文章來源:未知 點擊數(shù):2538 更新時間:2006-1-19
數(shù)據(jù)庫系統(tǒng)是管理信息系統(tǒng)的核心,基于數(shù)據(jù)庫的聯(lián)機事務處理(OLTP)以及聯(lián)機分析處理(OLAP)是銀行、企業(yè)、政府等部門最為重要的計算機應用之一。從大多數(shù)系統(tǒng)的應用實例來看,查詢操作在各種數(shù)據(jù)庫操作中所占據(jù)的比重最大,而查詢操作所基于的SELECT語句在SQL語句中又是代價最大的語句。舉例來說,如果數(shù)據(jù)的量積累到一定的程度,比如一個銀行的賬戶數(shù)據(jù)庫表信息積累到上百萬甚至上千萬條記錄,全表掃描一次往往需要數(shù)十分鐘,甚至數(shù)小時。如果采用比全表掃描更好的查詢策略,往往可以使查詢時間降為幾分鐘,由此可見查詢優(yōu)化技術(shù)的重要性。
筆者在應用項目的實施中發(fā)現(xiàn),許多程序員在利用一些前端數(shù)據(jù)庫開發(fā)工具(如PowerBuilder、Delphi等)開發(fā)數(shù)據(jù)庫應用程序時,只注重用戶界面的華麗,并不重視查詢語句的效率問題,導致所開發(fā)出來的應用系統(tǒng)效率低下,資源浪費嚴重。因此,如何設計高效合理的查詢語句就顯得非常重要。本文以應用實例為基礎,結(jié)合數(shù)據(jù)庫理論,介紹查詢優(yōu)化技術(shù)在現(xiàn)實系統(tǒng)中的運用。
分析問題
許多程序員認為查詢優(yōu)化是DBMS(數(shù)據(jù)庫管理系統(tǒng))的任務,與程序員所編寫的SQL語句關(guān)系不大,這是錯誤的。一個好的查詢計劃往往可以使程序性能提高數(shù)十倍。查詢計劃是用戶所提交的SQL語句的集合,查詢規(guī)劃是經(jīng)過優(yōu)化處理之后所產(chǎn)生的語句集合。DBMS處理查詢計劃的過程是這樣的:在做完查詢語句的詞法、語法檢查之后,將語句提交給DBMS的查詢優(yōu)化器,優(yōu)化器做完代數(shù)優(yōu)化和存取路徑的優(yōu)化之后,由預編譯模塊對語句進行處理并生成查詢規(guī)劃,然后在合適的時間提交給系統(tǒng)處理執(zhí)行,最后將執(zhí)行結(jié)果返回給用戶。在實際的數(shù)據(jù)庫產(chǎn)品(如Oracle、Sybase等)的高版本中都是采用基于代價的優(yōu)化方法,這種優(yōu)化能根據(jù)從系統(tǒng)字典表所得到的信息來估計不同的查詢規(guī)劃的代價,然后選擇一個較優(yōu)的規(guī)劃。雖然現(xiàn)在的數(shù)據(jù)庫產(chǎn)品在查詢優(yōu)化方面已經(jīng)做得越來越好,但由用戶提交的SQL語句是系統(tǒng)優(yōu)化的基礎,很難設想一個原本糟糕的查詢計劃經(jīng)過系統(tǒng)的優(yōu)化之后會變得高效,因此用戶所寫語句的優(yōu)劣至關(guān)重要。系統(tǒng)所做查詢優(yōu)化我們暫不討論,下面重點說明改善用戶查詢計劃的解決方案。
解決問題
下面以關(guān)系數(shù)據(jù)庫系統(tǒng)Informix為例,介紹改善用戶查詢計劃的方法。
1.合理使用索引
索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢效率。現(xiàn)在大多數(shù)的數(shù)據(jù)庫產(chǎn)品都采用IBM最先提出的ISAM索引結(jié)構(gòu)。索引的使用要恰到好處,其使用原則如下:
●在經(jīng)常進行連接,但是沒有指定為外鍵的列上建立索引,而不經(jīng)常連接的字段則由優(yōu)化器自動生成索引。
●在頻繁進行排序或分組(即進行g(shù)roup by或order by操作)的列上建立索引。
●在條件表達式中經(jīng)常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。
●如果待排序的列有多個,可以在這些列上建立復合索引(compound index)。
●使用系統(tǒng)工具。如Informix數(shù)據(jù)庫有一個tbcheck工具,可以在可疑的索引上進行檢查。在一些數(shù)據(jù)庫服務器上,索引可能失效或者因為頻繁操作而使得讀取效率降低,如果一個使用索引的查詢不明不白地慢下來,可以試著用tbcheck工具檢查索引的完整性,必要時進行修復。另外,當數(shù)據(jù)庫表更新大量數(shù)據(jù)后,刪除并重建索引可以提高查詢速度。
2.避免或簡化排序
應當簡化或避免對大型表進行重復的排序。當能夠利用索引自動以適當?shù)拇涡虍a(chǎn)生輸出時,優(yōu)化器就避免了排序的步驟。以下是一些影響因素:
●索引中不包括一個或幾個待排序的列;
●group by或order by子句中列的次序與索引的次序不一樣;
●排序的列來自不同的表。
為了避免不必要的排序,就要正確地增建索引,合理地合并數(shù)據(jù)庫表(盡管有時可能影響表的規(guī)范化,但相對于效率的提高是值得的)。如果排序不可避免,那么應當試圖簡化它,如縮小排序的列的范圍等。
3.消除對大型表行數(shù)據(jù)的順序存取
在嵌套查詢中,對表的順序存取對查詢效率可能產(chǎn)生致命的影響。比如采用順序存取策略,一個嵌套3層的查詢,如果每層都查詢1000行,那么這個查詢就要查詢10億行數(shù)據(jù)。避免這種情況的主要方法就是對連接的列進行索引。例如,兩個表:學生表(學號、姓名、年齡……)和選課表(學號、課程號、成績)。如果兩個表要做連接,就要在“學號”這個連接字段上建立索引。
還可以使用并集來避免順序存取。盡管在所有的檢查列上都有索引,但某些形式的where子句強迫優(yōu)化器使用順序存取。下面的查詢將強迫對orders表執(zhí)行順序操作:
SELECT * FROM orders WHERE (customer_num=104 AND order_num1001) OR order_num=1008
雖然在customer_num和order_num上建有索引,但是在上面的語句中優(yōu)化器還是使用順序存取路徑掃描整個表。因為這個語句要檢索的是分離的行的集合,所以應該改為如下語句:
SELECT * FROM orders WHERE customer_num=104 AND order_num1001
UNION
SELECT * FROM orders WHERE order_num=1008
這樣就能利用索引路徑處理查詢。
4.避免相關(guān)子查詢
一個列的標簽同時在主查詢和where子句中的查詢中出現(xiàn),那么很可能當主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此應當盡量避免子查詢。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。
5.避免困難的正規(guī)表達式
MATCHES和LIKE關(guān)鍵字支持通配符匹配,技術(shù)上叫正規(guī)表達式。但這種匹配特別耗費時間。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”
即使在zipcode字段上建立了索引,在這種情況下也還是采用順序掃描的方式。如果把語句改為SELECT * FROM customer WHERE zipcode “98000”,在執(zhí)行查詢時就會利用索引來查詢,顯然會大大提高速度。
另外,還要避免非開始的子串。例如語句:SELECT * FROM customer WHERE zipcode[2,3]“80”,在where子句中采用了非開始子串,因而這個語句也不會使用索引。
6.使用臨時表加速查詢
把表的一個子集進行排序并創(chuàng)建臨時表,有時能加速查詢。它有助于避免多重排序操作,而且在其他方面還能簡化優(yōu)化器的工作。例如:
SELECT cust.name,rcvbles.balance,……other columns
FROM cust,rcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance0
AND cust.postcode“98000”
ORDER BY cust.name
如果這個查詢要被執(zhí)行多次而不止一次,可以把所有未付款的客戶找出來放在一個臨時文件中,并按客戶的名字進行排序:
SELECT cust.name,rcvbles.balance,……other columns
FROM cust,rcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance0
ORDER BY cust.name
INTO TEMP cust_with_balance
然后以下面的方式在臨時表中查詢:
SELECT * FROM cust_with_balance
WHERE postcode“98000”
臨時表中的行要比主表中的行少,而且物理順序就是所要求的順序,減少了磁盤I/O,所以查詢工作量可以得到大幅減少。
注意:臨時表創(chuàng)建后不會反映主表的修改。在主表中數(shù)據(jù)頻繁修改的情況下,注意不要丟失數(shù)據(jù)。
7.用排序來取代非順序存取
非順序磁盤存取是最慢的操作,表現(xiàn)在磁盤存取臂的來回移動。SQL語句隱藏了這一情況,使得我們在寫應用程序時很容易寫出要求存取大量非順序頁的查詢。
有些時候,用數(shù)據(jù)庫的排序能力來替代非順序的存取能改進查詢。
實例分析
下面我們舉一個制造公司的例子來說明如何進行查詢優(yōu)化。制造公司數(shù)據(jù)庫中包括3個表,模式如下所示:
1.part表
零件號 零件描述其他列
(part_num) (part_desc)(other column)
102,032 Seageat 30G disk ……
500,049 Novel 10M network card……
……
2.vendor表
廠商號廠商名其他列
(vendor _num) (vendor_name) (other column)
910,257 Seageat Corp ……
523,045 IBM Corp ……
……
3.parven表
零件號 廠商號 零件數(shù)量
(part_num) (vendor_num) (part_amount)
102,032910,2573,450,000
234,423321,0014,000,000
……
下面的查詢將在這些表上定期運行,并產(chǎn)生關(guān)于所有零件數(shù)量的報表:
SELECT part_desc,vendor_name,part_amount
FROM part,vendor,parven
WHERE part.part_num=parven.part_num
AND parven.vendor_num = vendor.vendor_num
ORDER BY part.part_num
如果不建立索引,上述查詢代碼的開銷將十分巨大。為此,我們在零件號和廠商號上建立索引。索引的建立避免了在嵌套中反復掃描。關(guān)于表與索引的統(tǒng)計信息如下:
表 行尺寸 行數(shù)量 每頁行數(shù)量 數(shù)據(jù)頁數(shù)量
(table) (row size) (Row count) (Rows/Pages) (Data Pages)
part150 10,00025 400
Vendor 150 1,000 25 40
Parven 13 15,000300 50
索引 鍵尺寸 每頁鍵數(shù)量 頁面數(shù)量
(Indexes) (Key Size) (Keys/Page) (Leaf Pages)
part 4500 20
Vendor4500 2
Parven8250 60
看起來是個相對簡單的3表連接,但是其查詢開銷是很大的。通過查看系統(tǒng)表可以看到,在part_num上和vendor_num上有簇索引,因此索引是按照物理順序存放的。parven表沒有特定的存放次序。這些表的大小說明從緩沖頁中非順序存取的成功率很小。此語句的優(yōu)化查詢規(guī)劃是:首先從part中順序讀取400頁,然后再對parven表非順序存取1萬次,每次2頁(一個索引頁、一個數(shù)據(jù)頁),總計2萬個磁盤頁,最后對vendor表非順序存取1.5萬次,合3萬個磁盤頁。可以看出在這個索引好的連接上花費的磁盤存取為5.04萬次。
實際上,我們可以通過使用臨時表分3個步驟來提高查詢效率:
1.從parven表中按vendor_num的次序讀數(shù)據(jù):
SELECT part_num,vendor_num,price
FROM parven
ORDER BY vendor_num
INTO temp pv_by_vn
這個語句順序讀parven(50頁),寫一個臨時表(50頁),并排序。假定排序的開銷為200頁,總共是300頁。
2.把臨時表和vendor表連接,把結(jié)果輸出到一個臨時表,并按part_num排序:
SELECT pv_by_vn,* vendor.vendor_num
FROM pv_by_vn,vendor
WHERE pv_by_vn.vendor_num=vendor.vendor_num
ORDER BY pv_by_vn.part_num
INTO TMP pvvn_by_pn
DROP TABLE pv_by_vn
這個查詢讀取pv_by_vn(50頁),它通過索引存取vendor表1.5萬次,但由于按vendor_num次序排列,實際上只是通過索引順序地讀vendor表(40+2=42頁),輸出的表每頁約95行,共160頁。寫并存取這些頁引發(fā)5*160=800次的讀寫,索引共讀寫892頁。
3.把輸出和part連接得到最后的結(jié)果:
SELECT pvvn_by_pn.*,part.part_desc
FROM pvvn_by_pn,part
WHERE pvvn_by_pn.part_num=part.part_num
DROP TABLE pvvn_by_pn
這樣,查詢順序地讀pvvn_by_pn(160頁),通過索引讀part表1.5萬次,由于建有索引,所以實際上進行1772次磁盤讀寫,優(yōu)化比例為30∶1。筆者在Informix Dynamic
Sever上做同樣的實驗,發(fā)現(xiàn)在時間耗費上的優(yōu)化比例為5∶1(如果增加數(shù)據(jù)量,比例可能會更大)。
小結(jié)
20%的代碼用去了80%的時間,這是程序設計中的一個著名定律,在數(shù)據(jù)庫應用程序中也同樣如此。我們的優(yōu)化要抓住關(guān)鍵問題,對于數(shù)據(jù)庫應用程序來說,重點在于SQL的執(zhí)行效率。查詢優(yōu)化的重點環(huán)節(jié)是使得數(shù)據(jù)庫服務器少從磁盤中讀數(shù)據(jù)以及順序讀頁而不是非順序讀頁。