⑴ sql語句性能如何優化
如何加快查詢速度?
1、升級硬體
2、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。
3、擴大伺服器的內存
4、增加伺服器CPU個數
5、對於大的資料庫不要設置資料庫自動增長,它會降低伺服器的性能
6、在查詢Select語句中用Where字句限制返回的行數,避免表掃描,如果返回不必要的數據,浪費了伺服器的I/O資源,加重了網路的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其他的聯接訪問表,後果嚴重。
7、查詢時不要返回不需要的行、列
8、用select top 100 / 10 Percent 來限制用戶返回的行數或者SET ROWCOUNT來限制操作的行
9、在IN後面值的列表中,將出現最頻繁的值放在最前面,出現得最少的放在最後面,減少判斷的次數
10、一般在GROUP BY 個HAVING字句之前就能剔除多餘的行,所以盡量不要用它們來做剔除行的工作。他們的執行順序應該如下最優:
select的Where字句選擇所有合適的行,Group By用來分組個統計行,Having字句用來剔除多餘的分組。這樣Group By 個Having的開銷小,查詢快.對於大的數據行進行分組和Having十分消耗資源。如果Group BY的目的不包括計算,只是分組,那麼用Distinct更快
11、一次更新多條記錄比分多次更新每次一條快,就是說批處理好
⑵ sql server 工程師以後的工作方向
資料庫方向上的十種職業 這幾天泡在「三十而立」那個板塊,看到很多朋友(從20歲以下到35歲以上,呵呵)都有很多感觸或者迷惑。 所謂「人無遠慮,必有近憂」,如果等到了30歲還不知道自己想干什麼,能幹什麼,那也許是一種遺憾或者悲哀。 在MSSQL這個板塊也偶爾看到一些朋友問關於發展方向和重點等方面的問題。 我不敢說自己的資料庫專業知識有多強,畢竟這個世界很大,牛人極多。 只是想把自己在資料庫這個方向上親身做過的,遇到和看得到一些職位大致總結一下, 這些職位都是實實在在的貼在招聘各種網站上的,我也有機會和一些職位上的朋友或同事工作過。 希望對大家確定自己的職業方向和重點有一點幫助。 如果總結得不準確或者有誤,請各位高手指正。只有通過討論和交流才能共同提高。 ----------------------------------------------------------------------- 資料庫方向上的十種職業 (除去那些資料庫研發等太過專業的方向) 前面五種的重點是設計和應用,側重於軟體和數據邏輯層面。 後面五種的重點是運營和維護,側重與硬體和數據物理層面。 不過這些職位不是孤立,反而是互相交叉的,只是側重點不同。 說實在的,這些職位沒有好與不好之分,每個方向都可以做得很好, 全憑個人的興趣和目標,但是因為有些職位需求相對少,有機會接觸的人不多, 結果就物以稀罕為貴,市場需求決定價值。 前面五種: 重點是設計和應用,側重於軟體和數據邏輯層面。 資料庫應用開發 (application development) 除了基本的SQL方面的知識,還要對開發流程,軟體工程,各種框架和開發工具等等 資料庫應用開發這個方向上的機會最多,職位最多 數據建模專家 (data modeler) 除了基本的SQL方面的知識,非常熟悉資料庫原理,數據建模 負責將用戶對數據的需求轉化為資料庫物理設計和物理設計 這個方向上在大公司(金融,保險,研究,軟體開發商等)有專門職位, 在中小公司則可能由程序員承擔。 商業智能專家 (business intelligence - BI) 主要從商業應用,最終用戶的角度去從數據中獲得有用的信息, 涉及OLAP (online analytical processing) 需要使用SSRS, cognos, crystal report等報表工具,或者其他一些數據挖掘,統計方面的軟體工具 (這個方面我不熟悉,不敢亂說:) ETL開發 (ETL Developer) 使用ETL工具或者自己編寫程序在不同的數據源之間對數據進行導入,導出,轉換, 所接觸的資料庫一般數據量非常大,要求進行的數據轉換也比較復雜。 和數據倉庫和商業智能的關系比較密切。 在一些資料庫應用規模很大的公司裡面有專門的職位, 中小公司裡面則可能由程序員或者DBA負責這方面的工作。 數據構架師 (Data Architect) 主要從全局上制定和控制關於資料庫在邏輯這一層的大方向, 也包括數據可用性,擴展性等長期性戰略, 協調資料庫的應用開發,建模,DBA之間的工作。 這個方向上在大公司(金融,保險,研究,軟體開發商等)有專門職位, 在中小公司或者沒有這個職位,或者由開發人員,DBA負責。 後面五種: 重點是運營和維護,側重與硬體和數據物理層面。 資料庫管理員 (database administrator - DBA) 資料庫的安裝,配置,調優,備份/恢復,監控,自動化等, 協助應用開發(有些職位還要求優化SQL,寫存儲過程和函數等) 這個方向上的職位相對少一些,但一般有點規模的公司還是會有這樣的職位 數據倉庫專家 (data warehouse - DW) 應付超大規模的數據,歷史數據的存儲,管理和使用, 和商業智能關系密切,很多時候BI和DW是放在一個大類裡面的, 但是我覺得DW更側重於硬體和物理層上的管理和優化。 存儲工程師 (storage engineer) 專門負責提供數據存儲方案,使用各種存儲技術滿足數據訪問和存儲需求, 和DBA的工作關系比較密切。 對高可用性有嚴格要求(比如通信,金融,數據中心等)的公司通常有這種職位, 這種職位也非常少。 性能優化工程師 (performance engineer) 專長資料庫的性能調試和優化,為用戶提供解決性能瓶頸方面的問題。 我知道至少IBM, 微軟和Oracle都有專門的資料庫性能實驗室(database performance lab), 也有專門的性能優化工程師,負責為其資料庫產品和關鍵應用提供這方面的技術支持。 對資料庫性能有嚴格要求的公司(比如金融行業)可能會有這種職位。 因為針對性很強,甚至要求對多種資料庫非常熟悉,所以職位極少。 高級資料庫管理員 (senior DBA) 在DBA的基礎上,還涉及上面3種職位的部分工作,具體包括下面這些: 對應用系統的數據(布局,訪問模式,增長模式,存儲要求等)比較熟悉。 對性能優化非常熟悉,可以發現並優化從SQL到硬體I/O,網路等各個層面上的瓶頸 對於存儲技術相對熟悉,可能代替存儲工程師的一些工作, 對資料庫的高可用性技術非常熟悉(比如MSSQL的集群,ORACLE RAC/FailSafe, IBM的DPF, HADR等) 對大規模資料庫有效進行物理擴展(比如表分區)或者邏輯擴展(比如資料庫分區,聯合資料庫等) 熟悉各種數據復制技術,比如單向,雙向,點對點復制技術,以滿足應用要求。 災難數據恢復過程的建立,測試和執行 這種職位一般只在對資料庫要求非常高並且規模非常大(比如金融,電信,數據中心等)的公司需要, 而且這種公司一般有一個專門獨立負責資料庫的部門或組。 這種職位非常少。
⑶ SQL資料庫專業的就業方向
粘帖點給你,CSDN論壇上看到的,希望能幫助你。
前面四種:
資料庫應用開發 (application development)
除了基本的SQL方面的知識,還要對開發流程,軟體工程,各種框架和開發工具等等
資料庫應用開發這個方向上的機會最多,職位最多,薪水一般
數據建模專家 (data modeler)
除了基本的SQL方面的知識,非常熟悉資料庫原理,數據建模
負責將用戶對數據的需求轉化為資料庫物理設計和物理設計
這個方向上在大公司(金融,保險,研究,軟體開發商等)有專門職位,
在中小公司則可能由程序員承擔。
商業智能專家 (business intelligence - BI)
主要從商業應用,最終用戶的角度去從數據中獲得有用的信息,
涉及OLAP (online analytical processing)
需要使用SSRS, cognos, crystal report等報表工具,或者其他一些數據挖掘,統計方面的軟體工具
這個方面我不熟悉,不敢亂說(以免被拍磚,呵呵)
數據構架師 (Data Architect)
主要從全局上制定和控制關於資料庫在邏輯這一層的大方向,
也包括數據可用性,擴展性等長期性戰略,
協調資料庫的應用開發,建模,DBA之間的工作。
這個方向上在大公司(金融,保險,研究,軟體開發商等)有專門職位,
在中小公司或者沒有這個職位,或者由開發人員,DBA負責。
前面五種:
資料庫管理員 (database administrator - DBA)
資料庫的安裝,配置,調優,備份/恢復,監控,自動化等,
協助應用開發(有些職位還要求優化SQL,寫存儲過程和函數等)
這個方向上的職位相對少一些,但一般有點規模的公司還是會有這樣的職位
數據倉庫專家 (data warehouse - DW)
應付超大規模的數據,歷史數據的存儲,管理和使用,
和商業智能關系密切,很多時候BI和DW是放在一個大類裡面的,
但是我覺得DW更側重於硬體和物理層上的管理和優化。
存儲工程師 (storage engineer)
專門負責提供數據存儲方案,使用各種存儲技術滿足數據訪問和存儲需求,
和DBA的工作關系比較密切。
對高可用性有嚴格要求(比如通信,金融,數據中心等)的公司通常有這種職位,
這種職位也非常少。
性能優化工程師 (performance engineer)
專長資料庫的性能調試和優化,為用戶提供解決性能瓶頸方面的問題。
我知道至少IBM, 微軟和Oracle都有專門的資料庫性能實驗室(database performance lab),
也有專門的性能優化工程師,負責為其資料庫產品和關鍵應用提供這方面的技術支持。
對資料庫性能有嚴格要求的公司(比如金融行業)可能會有這種職位。
因為針對性很強,甚至要求對多種資料庫非常熟悉,所以職位極少。
高級資料庫管理員 (senior DBA)
在DBA的基礎上,還涉及上面3種職位的部分工作,具體包括下面這些:
對應用系統的數據(布局,訪問模式,增長模式,存儲要求等)比較熟悉。
對性能優化非常熟悉,可以發現並優化從SQL到硬體I/O,網路等各個層面上的瓶頸
對於存儲技術相對熟悉,可能代替存儲工程師的一些工作,
對資料庫的高可用性技術非常熟悉(比如MSSQL的集群,ORACLE RAC/FailSafe, IBM的DPF, HADR等)
對大規模資料庫有效進行物理擴展(比如表分區)或者邏輯擴展(比如資料庫分區,聯合資料庫等)
熟悉各種數據復制技術,比如單向,雙向,點對點復制技術,以滿足應用要求。
災難數據恢復過程的建立,測試和執行
這種職位一般只在對資料庫要求非常高並且規模非常大(比如金融,電信,數據中心等)的公司需要,
而且這種公司一般有一個專門獨立負責資料庫的部門或組。
這種職位非常少。
⑷ 單位招聘網站技術維護 最好能製作網站改版網站平時技術維護 都需要哪些條件
1.良好的團隊精神和溝通能力,愛崗敬業,有一定的組織協調能力。
2.較強的分析解決問題能力和學習能力。
3.品質優秀,性格開朗、大方。
4.專科科或以上學歷,2年以上的互聯網項目開發經驗經驗。
5.了解互聯網的基礎技術;精通Mysql資料庫體系結構,精通資料庫的結構設計和性能調優,包括資料庫架構設計、資料庫結構設計、觸發器和存儲過程等腳本編寫,精通資料庫建設、數據同步等技術;能夠熟練使用性能分析工具和優化工具;擅長分布式技術,特別是SQL SERVER的各種復制技術;了解Mysql/Oracle等資料庫原理,能熟練開發和使用資料庫。
6.熟練使用PHP語言的開發技術,熟悉DIV+CSS的Web頁面編寫,布局與流程; 具備良好的網頁編程能力。
7.熟練掌握 Dreamwaver,Photoshop等網頁製作和圖形設計軟體。
8.精通伺服器構架、調試、運行以及相關軟硬體安裝、使用和維護,能及時處理資料庫突發故障。
可以根據自己的需求自行更改.
⑸ sql 優化器
是SQL執行效率的重構工具。
可以幫助將低效率的SQL優化成為高效率的。
一般主要針對查詢語句。
將更多的判斷條件已到葉子節點上去操作。
⑹ 如何優化SQL
(1)選擇最有效率的表名順序(只在基於規則的優化器中有效): ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,FROM子句中寫在最後的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎表, 交叉表是指那個被其他表所引用的表. (2) WHERE子句中的連接順序.: ORACLE採用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾. (3) SELECT子句中避免使用『 * 『: ORACLE在解析的過程中, 會將'*' 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間 (4)減少訪問資料庫的次數: ORACLE在內部執行了許多工作: 解析SQL語句, 估算索引的利用率, 綁定變數 , 讀數據塊等; (5)在SQL*Plus , SQL*Forms和Pro*C中重新設置ARRAYSIZE參數, 可以增加每次資料庫訪問的檢索數據量 ,建議值為200 (6)使用DECODE函數來減少處理時間: 使用DECODE函數可以避免重復掃描相同記錄或重復連接相同的表. (7)整合簡單,無關聯的資料庫訪問: 如果你有幾個簡單的資料庫查詢語句,你可以把它們整合到一個查詢中(即使它們之間沒有關系) (8)刪除重復記錄: 最高效的刪除重復記錄方法 ( 因為使用了ROWID)例子:DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO); (9)用TRUNCATE替代DELETE: 當刪除表中的記錄時,在通常情況下, 回滾段(rollback segments ) 用來存放可以被恢復的信息. 如果你沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(准確地說是恢復到執行刪除命令之前的狀況) 而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息.當命令運行後,數據不能被恢復.因此很少的資源被調用,執行時間也會很短. (譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML) (10)盡量多使用COMMIT: 只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少: COMMIT所釋放的資源: a. 回滾段上用於恢復數據的信息. b. 被程序語句獲得的鎖c. redo log buffer 中的空間d. ORACLE為管理上述3種資源中的內部花費 (11)用Where子句替換HAVING子句: 避免使用HAVING子句, HAVING 只會在檢索出所有記錄之後才對結果集進行過濾. 這個處理需要排序,總計等操作. 如果能通過WHERE子句限制記錄的數目,那就能減少這方面的開銷. (非oracle中)on、where、having這三個都可以加條件的子句中,on是最先執行,where次之,having最後,因為on是先把不符合條件的記錄過濾後才進行統計,它就可以減少中間運算要處理的數據,按理說應該速度是最快的,where也應該比having快點的,因為它過濾數據後才進行sum,在兩個表聯接時才用on的,所以在一個表的時候,就剩下where跟having比較了。在這單表查詢統計的情況下,如果要過濾的條件沒有涉及到要計算欄位,那它們的結果是一樣的,只是where可以使用rushmore技術,而having就不能,在速度上後者要慢如果要涉及到計算的欄位,就表示在沒計算之前,這個欄位的值是不確定的,根據上篇寫的工作流程,where的作用時間是在計算之前就完成的,而having就是在計算後才起作用的,所以在這種情況下,兩者的結果會不同。在多表聯接查詢時,on比where更早起作用。系統首先根據各個表之間的聯接條件,把多個表合成一個臨時表後,再由where進行過濾,然後再計算,計算完後再由having進行過濾。由此可見,要想過濾條件起到正確的作用,首先要明白這個條件應該在什麼時候起作用,然後再決定放在那裡 (12)減少對表的查詢: 在含有子查詢的SQL語句中,要特別注意減少對表的查詢.例子:SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER FROM TAB_COLUMNS WHERE VERSION = 604) (13)通過內部函數提高SQL效率.: 復雜的SQL往往犧牲了執行效率. 能夠掌握上面的運用函數解決問題的方法在實際工作中是非常有意義的 (14)使用表的別名(Alias): 當在SQL語句中連接多個表時, 請使用表的別名並把別名前綴於每個Column上.這樣一來,就可以減少解析的時間並減少那些由Column歧義引起的語法錯誤. (15)用EXISTS替代IN、用NOT EXISTS替代NOT IN: 在許多基於基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接.在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率. 在子查詢中,NOT IN子句將執行一個內部的排序和合並. 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫成外連接(Outer Joins)或NOT EXISTS. 例子:(高效)SELECT * FROM EMP (基礎表) WHERE EMPNO > 0 AND EXISTS (SELECT 『X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = 『MELB') (低效)SELECT * FROM EMP (基礎表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = 『MELB') (16)識別'低效執行'的SQL語句: 雖然目前各種關於SQL優化的圖形化工具層出不窮,但是寫出自己的SQL工具來解決問題始終是一個最好的方法:SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, SQL_TEXT FROM V$SQLAREA WHERE EXECUTIONS>0 AND BUFFER_GETS > 0 AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 ORDER BY 4 DESC; (17)用索引提高效率: 索引是表的一個概念部分,用來提高檢索數據的效率,ORACLE使用了一個復雜的自平衡B-tree結構. 通常,通過索引查詢數據比全表掃描要快. 當ORACLE找出執行查詢和Update語句的最佳路徑時, ORACLE優化器將使用索引. 同樣在聯結多個表時使用索引也可以提高效率. 另一個使用索引的好處是,它提供了主鍵(primary key)的唯一性驗證.。那些LONG或LONG RAW數據類型, 你可以索引幾乎所有的列. 通常, 在大型表中使用索引特別有效. 當然,你也會發現, 在掃描小表時,使用索引同樣能提高效率. 雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價. 索引需要空間來存儲,也需要定期維護。</SPAN>
⑺ 怎樣進行sql資料庫的優化
1、資料庫空間是個概述,在sqlserver里,使用語句 exec sp_spaceused 'TableName' 這個語句來查。
⑻ sql優化的幾種方法面試
1.你把學校裡面學的東西都弄通,弄懂就可以了,基本的概念和原理都能說出來,如你說的sql優化就是:為資料庫建立索引,如何提高檢索速度之類的問題。教科書上都有說啊。
2.面試不是說一定要什麼都懂才能去面的,你要找多一點面試經驗,面試經常問什麼問題,比如指針,鏈表等,有針對性地准備一下,不用全部一骨碌地看。
3.積累經驗和編程作品,多做項目,自己多寫些程序。面試就有了籌碼。
⑼ oracle sql優化工具
toad 裡面有個quest sql optimizer 應該還可以,本人用的不多,不過就TOAD軟體來說還是不錯的
32 64位的都 有,網上找找,多的是
http://blog.itpub.net/17252115/viewspace-756460/