<optgroup id="r9hwm"></optgroup><nav id="r9hwm"><label id="r9hwm"></label></nav>

    <tt id="r9hwm"><tr id="r9hwm"></tr></tt>
  1. 
    
  2. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

  3. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

        1. <listing id="r9hwm"></listing>
          <delect id="r9hwm"></delect>
          <optgroup id="r9hwm"><samp id="r9hwm"><ol id="r9hwm"></ol></samp></optgroup>

          查詢語句的優化

          查詢語句的優化

          SQL查詢語句性能優化建議

          1、查列表時,盡量把要查的字段查出,select id,name from 這樣比select * from 效率高點。

          2、一個頁面有很多List要查,而這些List又屬于同一個表,只是條件不同,可以用or將所有的條件放在一個語句中,查出List,再用if根據條件判斷封裝不同List,這將很多個數據庫鏈接轉化成了一個數據庫鏈接,hibernate只要創建一個sessionfactory,效率比同時查多個語句快。

          3、盡量把需要的字段放在同一張表上,這和第二條類似。

          什么是SQL的查詢優化,舉例說明

          1 使用SET NOCOUNT ON 選項: 缺省地,每次執行SQL語句時,一個消息會從服務端發給客戶端以顯示SQL語句影響的行數。

          這些信息對客戶端來說很少有用。通過關閉這個缺省值,你能減少在服務端和客戶端的網絡流量,幫助全面提升服務器和應用程序的性能。

          為了關閉存儲過程級的這個特點,在每個存儲過程的開頭 包含“SET NOCOUNT ON”語句。 2 正確使用UNION和UNION ALL: 許多人沒完全理解UNION和UNION SELECT是怎樣工作的,因此,結果浪費了大量不必要的SQLServer資源。

          當使用UNION時,它相當于在結果集上執行SELECT DISTINCT。換句話說,UNION將聯合兩個相類似的記錄集,然后搜索重復的記錄并排除。

          如果這是你的目的,那么使用UNION是正 確的。但如果你使用UNION聯合的兩個記錄集沒有重復記錄,那么使用UNION會浪費資源,因為它要尋找重復記錄,即使你確定它們不存在。

          所以如果你知道你要聯合的記錄集里沒有重復,那么你要使用UNION ALL,而不是UNION。UNION ALL聯合記錄集,但不搜索重復記錄,這樣減少SQLServer資源的使用,從而提升性能。

          3 盡量不用SELECT * : 絕大多數情況下,不要用 * 來代替查詢返回的字段列表,用 * 的好處是代碼量少、就算是表結構或視圖的列發生變化,編寫的查詢SQL語句也不用變,都返回所有的字段。但數據庫服務器在解析時,如果碰到 *,則會先分析表的結構,然后把表的所有字段名再羅列出來。

          這就增加了 分析的時間。 4 慎用SELECT DISTINCT: DISTINCT子句僅在特定功能的時候使用,即從記錄集中排除重復記錄的時候。

          這是因為DISTINCT子句先獲取結果集然后去重,這樣增加SQLServer有用資源的使用。當然,如果你需要去做,那就只有去做了。

          當如果你知道SELECT語句將從不返回重復記錄,那么使用DISTINCT語句對SQLServer資源不必要的浪費。 5 少用游標: 任何一種游標都會降低SQLServer性能。

          有些情況不能避免,大多數情況可以避免。所以如果你的應用程序目前正在使用TSQL游標,看看這些代碼是否能夠重寫以避免它們。

          如果你需要一行一行的執行操作,考慮下邊這些選項中的一個或多個來代替游標的使用: 使用臨時表 使用WHILE循環 使用派生表 使用相關子查詢 使用CASE語句 使用多個查詢 上面每一個都能取代游標并且執行更快。 如果你不能避免使用游標,至少試著提高它們的速度,找出加速游標的方法。

          6 選擇最有效率的表名順序: SQLSERVER的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表(基礎表driving table)將被最先處理,在FROM子句中包含多個表的情況下,必須選擇記錄條數最少的表作為基礎表,當SQLSERVER處理多個表時,會運用排序及合并的方式連接它們。首先 ,掃描第一個表(FROM子句中最后的那個表)并對記錄進行排序;然后掃描第二個表(FROM子句中最后第二個表);最后將所有從第二個表中檢索出的記錄與第一個表中合適記錄進行合并。

          例如: 表 TAB1有 16384 條記錄,表 TAB2 有5條記錄,選擇TAB2作為基礎表 (最好的方法): select count(*) from TAB1 a, TAB2 b 選擇TAB1作為基礎表 (不佳的方法): select count(*) from TAB2 a, TAB1 b 如果有3個以上的表連接查詢,那就需要選擇交叉表(intersection table)作為基礎表,交叉表是指那個被其他表所引用的表。 7 使用表的別名(Alias): 當在SQL語句中連接多個表時,請使用表的別名并把別名前綴于每個Column上,這樣可以減少解析的時間并減少那些由Column歧義引起的語法錯誤。

          8 SARG你的WHERE條件: ARGE來源于"Search Argument"(搜索參數)的首字母拼成的"SARG",它是指WHERE子句里,列和常量的比較。如果WHERE子句是sargable(可SARG的),這意味著它能利用索引加速查詢的完成。

          如果WHERE子句不是可SARG的,這意味著WHERE子句不能利用索引(或至少部分不能利用), 執行的是全表或索引掃描,這會引起查詢的性能下降。 在WHERE子句里不可SARG的搜索條件如"IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE"和"LIKE '%500'",通常(但不總是)會阻止查詢優化器使用索引執行搜索。

          另外在列上使用包括函數的表達式、兩邊都使用相同列的表達式、或和一個列(不是常 量)比較的表達式,都是不可SARG的。 并不是每一個不可SARG的WHERE子句都注定要全表掃描。

          如果WHERE子句包括兩個可SARG和一個不可SARG的子句,那么至少可SARG的子句能使用索引(如果存在的話)幫助快速訪問數據。 大多數情況下,如果表上有包括查詢里所有SELECT、JOIN、WHERE子句用到的列的覆蓋索引,那么覆蓋索引能夠代替全表掃描去返回查詢的數據,即使它有不可SARG的WHERE子句。

          但記住覆蓋索引尤其自身的缺陷,如此經常產生寬索引會增加讀磁盤I/O。某些情況下,可以把不可SARG的WHER E子句重寫成可SARG的子句。

          例如: WHERE SUBSTRING(firstname,1,1) = 'm' 可以寫成: WHERE firstname 。

          數據庫查詢有哪些優化方面

          1 SQL查詢語句的重寫,對于一個查詢可以用多種查詢語句實現,但不同查詢語句的數據庫執行計劃是不同的,一旦不能夠使用索引或造成較大的內存占用會導致性能下降,因此需要對查詢語句進行重寫優化,最典型的例子就是not in語句使用外連接方式實現來進行優化

          2 創建合理的索引結構,根據查詢語句的中查詢條件,在關系表上建立相應的索引,如B+樹索引和hash索引

          3 修改程序業務邏輯,有些功能如果使用SQL語句實現,不但SQL語句復雜,還將導致數據庫的負擔增加,因此可以將有些數據操作的業務邏輯放到應用層進行實現,就是通過java編程實現

          4 修改數據庫服務器相關參數,優化服務器性能

          【查詢優化】怎樣用SQL語句查看查詢的性能指標

          捍郵?莼撼逯卸寥〉氖?菀呈? 物理讀取:從物理磁盤中往緩沖讀取的數據頁數; 預讀:根據執行計劃從物理磁盤中往緩沖讀取的數據頁數; 其中對于首次查詢一般情況下會有一下關系:邏輯讀取=物理讀取+預讀(其中的具體聯系,由于已經在之前的博客文章中提到,就不再詳細說明(文章名為【查詢優化】MSSQL查詢執行流程)) 同理,后面的lob邏輯讀取、物理讀取、預讀概念理解差不多,只是是對相應表進行更新或插入操作時體現。 對于掃描計數,以上圖片的查詢沒有連接查詢,因此意義不大。不過,如果連接查詢來說,特別是循環查詢那種,比如說自連接,如果循環次數越多,則掃描次數也就越多,則會使得查詢的效率越低。這是掃描計數是一個比較重要的性能體現參數。 對于邏輯讀取,由于SQLSERVER中對數據進行任何操作都要把數據讀入到緩沖當中,如果邏輯讀取的頁數越多,則查詢的性能越低。為此,邏輯讀取一般都是查詢性能體現的一個重要參數。二、SET STATISTICS TIME (SQL Server解析和編譯時間) 上面顯示的信息表明,執行這次查詢使用了多少CPU運行時間和運行查詢使用了多少時間。CPU運行時間是對運行查詢所需要的CPU資源的一種相對穩定的測量方法,與CPU的忙閑程度沒有關系。但是,每次運行查詢時這一數字也會有所不同,只是變化的范圍沒有總時間變化大。總時間是對查詢執行所需要的時間(不計算阻塞或讀數據的時間),由于服務器上的負載是在不斷變化的,因此這一數據的變化范圍有時會相當地大。

          總的來說,量化地來看一個查詢語句的性能可以在幾個參數進行比較:1、CPU時間。可以比較查詢的循環掃描次數和邏輯讀取的數據量;

          轉載請注明出處華閱文章網 » 查詢語句的優化

          短句

          函數的調用語句

          閱讀(279)

          1、函數的調用語句fun((exp1,exp2),(exp3,exp4,exp5))中含有的實參 5個,這里沒有什么疑問的!從形式上看很看是兩個的,因為有二個為一組做為一個對象,有三個為一組做為一個對象,共

          短句

          函數的調用語句是

          閱讀(303)

          C語言中函數調用是什么意思,調用有什么作用 如果在設計c語言程序中,反復要用到一個組合計算的程序段,比如:void main(){int a,b,c,x,y,z,j,k,l;c=a+b; c-=(a-b)/2; //計算c=(a+

          短句

          excelvbawith語句

          閱讀(279)

          VBA中的WITH 語句用法 及含義 通俗點講with的作用就是簡化代碼,讓代碼簡潔易懂讓你不需要輸入重復的內容例如:With [A1].RowHeight = 10.ColumnWidth = 15End With相當于[A1

          短句

          mysql循環語句for循環

          閱讀(1408)

          mysql sql中流程控制有for循環嗎 delimiter $$mysql>mysql> CREATE PROCEDURE myProc() //創建while循環的存儲過程 if分支語句示例-> BEGIN->-> DECLARE i int;-> SET i=1;

          短句

          安慰人的語句

          閱讀(275)

          安慰人的話大全,別人傷心怎么安慰人的話句子 1、東西雖然丟了,就算它再珍貴又有何防,畢竟咱人是好好的,懂嗎?這叫"留著青山在,不怕沒柴燒"。希望這件事情不會再影響到你的心情。2、幾乎所有事情都是兩面性的,如只看消極的一面,心情自然會低落

          短句

          eftosql語句

          閱讀(257)

          EF和Linq to Sql的區別 實 體框架 是 ADO.NET 中的一組支持開發面向數據的軟件應用程序的技術。面向數據的應用程序的架構師和開發人員曾為實現兩個迥然不同的目標費盡心

          短句

          if條件循環語句

          閱讀(333)

          IF是不是循環語句if是判斷語句。它的結構一般有以下幾種形式:一、if …… then ……二、if …… then …… else ……三、if …… then……else……end if四、if …… then……elseif …… then……else

          短句

          形容春天的語句

          閱讀(260)

          描寫春天景色的句子 1 春天真是讓人舒服的春天,春天的景色真美啊! 2 這春天,既給人以新的生命,也給人以新的希望.我愛這美麗的春天. 3 近了,近了,我已聽到春天的腳步聲了,這一切

          短句

          有關愛的語句

          閱讀(239)

          【有關愛的詩句、名言】 十年生死兩茫茫,不思量,自難忘.窈窕淑女,君子好逑.--春秋詩經(“國風”中的一首)周南 關雎關關雎鳩,在河之洲.窈窕淑女,君子好逑.參差荇菜,左右流之.窈窕淑女,寤寐求之.求之不得,寤寐思服.悠哉悠哉,輾轉反側.參差荇菜,左右

          短句

          oracle的select語句

          閱讀(271)

          oracle存儲過程中的select語句是怎樣的create or replace procedure pro_test is begin select * from t_test; end pro_test; 這個存儲過程正確嗎? 昨天因為這個,耽誤了好久

          短句

          畢業英語句子

          閱讀(237)

          畢業寄語英文短句,只要一句,比如Don't forget to me I miss you-百度1, the bloom of the most gorgeous smile, to dream of a more beautiful tomorrow.2.

          短句

          舍不得語句

          閱讀(248)

          舍不得的句子 1、執著于瞬間的永恒,因為本沒有永恒,不能堅守于永恒的瞬間,因為本沒有瞬間,這執著與舍得之間的心酸辛苦要有多大的勇氣和包容,沒有舍不得,只有放不下。2、有一種情感在心的痛,那是一種難以割舍的痛,來自內心的底部的痛,真得舍不得

          短句

          語句對什么作用

          閱讀(260)

          句子的作用 首先現代文閱讀分為課內,課外2種 保證課內的不錯,理解課文的主旨,有深層含義的段落,句子,并能解釋出含義。你在做題的時候,問到的問題,你要多聯系全文,即使卷子沒給全

          短句

          javascript語句

          閱讀(267)

          javascript語句是什么 Javascript是一種由Netscape的LiveScript發展而來的腳本語言,主要目的是為了解決服務器終端語言,比如Perl,遺留的速度問題。當時服務端需要對數據進行驗

          短句

          函數的調用語句

          閱讀(280)

          1、函數的調用語句fun((exp1,exp2),(exp3,exp4,exp5))中含有的實參 5個,這里沒有什么疑問的!從形式上看很看是兩個的,因為有二個為一組做為一個對象,有三個為一組做為一個對象,共

          短句

          函數的調用語句是

          閱讀(304)

          C語言中函數調用是什么意思,調用有什么作用 如果在設計c語言程序中,反復要用到一個組合計算的程序段,比如:void main(){int a,b,c,x,y,z,j,k,l;c=a+b; c-=(a-b)/2; //計算c=(a+

          短句

          excelvbawith語句

          閱讀(280)

          VBA中的WITH 語句用法 及含義 通俗點講with的作用就是簡化代碼,讓代碼簡潔易懂讓你不需要輸入重復的內容例如:With [A1].RowHeight = 10.ColumnWidth = 15End With相當于[A1

          短句

          mysql循環語句for循環

          閱讀(1408)

          mysql sql中流程控制有for循環嗎 delimiter $$mysql>mysql> CREATE PROCEDURE myProc() //創建while循環的存儲過程 if分支語句示例-> BEGIN->-> DECLARE i int;-> SET i=1;

          短句

          安慰人的語句

          閱讀(275)

          安慰人的話大全,別人傷心怎么安慰人的話句子 1、東西雖然丟了,就算它再珍貴又有何防,畢竟咱人是好好的,懂嗎?這叫"留著青山在,不怕沒柴燒"。希望這件事情不會再影響到你的心情。2、幾乎所有事情都是兩面性的,如只看消極的一面,心情自然會低落

          短句

          cif語句格式

          閱讀(315)

          用C語言編程中if語句的格式是什么1.if(條件語句){程序執行體;}else{程序執行體;}2.舉個例子:int a;scanf("%d",&a);if(a > 0){printf("a > 0"); //如果輸入的數大于0,就執行這個語句}else //

          短句

          if條件循環語句

          閱讀(333)

          IF是不是循環語句if是判斷語句。它的結構一般有以下幾種形式:一、if …… then ……二、if …… then …… else ……三、if …… then……else……end if四、if …… then……elseif …… then……else

          短句

          eftosql語句

          閱讀(257)

          EF和Linq to Sql的區別 實 體框架 是 ADO.NET 中的一組支持開發面向數據的軟件應用程序的技術。面向數據的應用程序的架構師和開發人員曾為實現兩個迥然不同的目標費盡心

          <optgroup id="r9hwm"></optgroup><nav id="r9hwm"><label id="r9hwm"></label></nav>

            <tt id="r9hwm"><tr id="r9hwm"></tr></tt>
          1. 
            
          2. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

          3. <optgroup id="r9hwm"><samp id="r9hwm"><dl id="r9hwm"></dl></samp></optgroup>

                1. <listing id="r9hwm"></listing>
                  <delect id="r9hwm"></delect>
                  <optgroup id="r9hwm"><samp id="r9hwm"><ol id="r9hwm"></ol></samp></optgroup>
                  亚洲丰满少妇xxxxx高潮