如何對於幾百行SQL語句進行優化?

1.最近在開發中遇到的一些關於幾百行SQL語句作查詢的問題,須要如何的解決優化SQL這確實是個問題,對於當下的ORM 框架 EF 以及其餘的一些的開源的框架例如Drapper ,以及Sqlite-Sugar 等等,對於查詢的速度以及性能確實還不錯,可是對於幾百條的SQL語句那麼可能就不行了這些輕量級的框架扛不住。當在寫SQL語句須要注意的規則都沒法提升速率的時候,我的認爲仍是須要傳統的ADO.NET 參數化的SQL來進行解決問題。web

下面是我最近開發當中遇到的一些複雜的SQL的語句如何處理以及優化查詢我還在找確切的辦法來進行解決。還在進行中,固然對於數據庫確實我進行必定的處理,仍是有必定的效果的。下面就進入正題吧!數據庫

2.花了2天時間寫的SQL查詢月結算曆史的數據app

  1  select                                                                                                                                                                                                            
  2              sum(case when indentdate >= '2015-11-28 00:00:00' and                                                                                                         
  3                   indentdate <= '2015-11-28 23:59:59' and                                                                                                             
  4                   indenttype = 0 and indent_step = '00' then 1 else 0 end) totalcount1, --本月總數量                                                                                                              
  5        convert(int,sum(case when indentdate >= '2015-11-28 00:00:00' and                                                                                            
  6                   indentdate <= '2015-11-28 23:59:59' and                                                                                                             
  7                   indenttype = 0 and indent_step = '00' then                                                                                                                                                      
  8               t1.totalpay else 0 end)) totalpay1 ,---本月總金額                                                                                                                                                      
  9        sum(case when indentdate >='2015-11-28 00:00:00' and                                                                                                       
 10                   t1.indentdate <= '2015-11-28 23:59:59' and                                                                                                          
 11                   t2.modifieddate >= '2015-11-28 00:00:00' and                                                                                                      
 12                   t2.modifieddate <= '2015-11-28 23:59:59' and                                                                                                        
 13                   t1.indentstatus='020' and indenttype = 0 and indent_step = '00' then                                                                                             
 14               1 else 0 end)                                                                                                                                                                                       
 15            + sum(case when   indentdate >='2015-11-28 00:00:00' and                                                                                                  
 16                   indentdate <= '2015-11-28 23:59:59' and t1.indentstatus='050'                                                                              
 17                    and financedate >= '2015-11-28 00:00:00' and                                                                                
 18                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 19                   indent_step = '00' then                                                                                                                                                                         
 20               1 else 0 end)+sum(case when  indentdate >='2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59' and    financedate>='2015-11-28 00:00:00' and  financedate<='2015-11-28 23:59:59' and indentstatus IN ('111','112')  and  indenttype=1 then 1 else 0 end)  totalcount2,--本月失效數量                                                                                                                                                           
 21        convert(int,sum(case when  indentdate >='2015-11-28 00:00:00'  and                                                                                         
 22                   t1.indentdate <= '2015-11-28 23:59:59' and t2.modifieddate >= '2015-11-28 00:00:00' and               
 23                   t2.modifieddate <= '2015-11-28 23:59:59'   and t1.indentstatus='020'                                                                        
 24                     and indenttype = 0 and                                                                                                                                                    
 25                   indent_step = '00' then                                                                                                                                                                         
 26               t1.totalpay  else 0 end)                                                                                                                                                                               
 27            + sum(case when  indentdate >='2015-11-28 00:00:00' and                                                                                                 
 28                   indentdate <= '2015-11-28 23:59:59'   and t1.indentstatus='050'                                                                              
 29                     and financedate >= '2015-11-28 00:00:00' and                                                                                
 30                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 31                   indent_step = '00' then                                                                                                                                                                         
 32               t1.totalpay  else 0 end))-sum(case when indentdate >='2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59' and financedate>='2015-11-28 00:00:00' and t1.financedate<='2015-11-28 23:59:59' and t1.indentstatus IN ('111','112')  and  indenttype=1 then t1.totalpay  else 0 end ) totalpay2, ---本月失效金額                                                                                                                                                   
 33                                                                                                                                                                                                                   
 34        sum(case when t1.indentdate<= '2015-11-28 00:00:00' and t2.modifieddate >= '2015-11-28 00:00:00' and           
 35                   t2.modifieddate <= '2015-11-28 23:59:59' and t1.indentstatus='020'                                                                         
 36                     and indenttype = 0 and                                                                                                                                                    
 37                   indent_step = '00' then                                                                                                                                                                         
 38               1 else 0 end)                                                                                                                                                                                       
 39            + sum(case when                                                                                                                                                                                        
 40                   indentdate <= '2015-11-28 00:00:00' and t1.indentstatus='050'                                                                            
 41                    and financedate >= '2015-11-28 00:00:00' and                                                                                
 42                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 43                   indent_step = '00' then                                                                                                                                                                         
 44               1                                                                                                                                                                                                   
 45              else                                                                                                                                                                                                 
 46               0      
 47               --------以上                                                                                                                                                                                             
 48            end)+sum(case when   indentdate <= '2015-11-28 00:00:00' and  financedate>='2015-11-28 00:00:00' and  financedate<='2015-11-28 23:59:59' and indentstatus IN ('111','112')  and  indenttype=1 then 1 else 0 end) totalcount3 ,---歷史失效數量                                                                                                                                                                      
 49        convert(int,sum(case                                                                                                                                                                                       
 50              when t1.indentdate<= '2015-11-28 00:00:00' and t2.modifieddate >= '2015-11-28 00:00:00' and              
 51                   t2.modifieddate <= '2015-11-28 23:59:59'   and t1.indentstatus='020'                                                                         
 52                     and indenttype = 0 and                                                                                                                                                    
 53                   indent_step = '00' then                                                                                                                                                                         
 54               t1.totalpay                                                                                                                                                                                            
 55              else                                                                                                                                                                                                 
 56               0                                                                                                                                                                                                   
 57            end)+                                                                                                                                                                                                  
 58        sum(case                                                                                                                                                                                                   
 59              when                                                                                                                                                                                                 
 60                   indentdate <= '2015-11-28 00:00:00'  and t1.indentstatus='050'                                                                            
 61                    and financedate >= '2015-11-28 00:00:00' and                                                                                
 62                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 63                   indent_step = '00' then                                                                                                                                                                         
 64               t1.totalpay                                                                                                                                                                                            
 65              else                                                                                                                                                                                                 
 66               0                                                                                                                                                                                                   
 67            end) -sum(case when   indentdate <= '2015-11-28 00:00:00' and financedate>='2015-11-28 00:00:00' and  financedate<='2015-11-28 23:59:59' and t1.indentstatus IN ('111','112')  and  indenttype=1 then t1.totalpay  else 0 end )) totalpay3, --歷史失效金額                                                                                                                                                                        
 68              sum(case                                                                                                                                                                                       
 69              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
 70                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
 71                   indent_step = '00' then                                                                                                                                                                         
 72               1                                                                                                                                                                                     
 73              else                                                                                                                                                                                                 
 74               0                                                                                                                                                                                                   
 75            end) -                                                                                                                                                                                                 
 76         (sum(case                                                                                                                                                                                                  
 77              when indentdate >= '2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59'and t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
 78                   t2.modifieddate <= '2015-11-28 23:59:59'                                                                           
 79                    and t1.indentstatus='020' and indenttype = 0 and                                                                                                                                                    
 80                   indent_step = '00' then                                                                                                                                                                         
 81               1                                                                                                                                                                                     
 82              else                                                                                                                                                                                                 
 83               0                                                                                                                                                                                                   
 84            end)                                                                                                                                                                                                   
 85            +sum(case                                                                                                                                                                                              
 86              when                                                                                                                                                                                                 
 87                   indentdate >= '2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59'   and                                                                              
 88                      t1.indentstatus='050' and financedate >= '2015-11-28 00:00:00' and                                                                                
 89                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 90                   indent_step = '00' then                                                                                                                                                                         
 91               1                                                                                                                                                                                      
 92              else                                                                                                                                                                                                 
 93               0                                                                                                                                                                                                   
 94            end)+sum(case                                                                                                                                                                                          
 95              when                                                                                                                                                                                                 
 96                 indentdate >= '2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59'   and t1.indentstatus IN ('111','112')  and financedate >= '2015-11-28 00:00:00' and                                                                            
 97                   financedate <= '2015-11-28 23:59:59' and indenttype = 1  then                                                                                       
 98               1                                                                                                                                                                                     
 99              else                                                                                                                                                                                                 
100               0                                                                                                                                                                                                   
101            end)) totalcount4,---本月應結算訂單數=本月總訂單數-本月失效訂單數                                                                                                                                      
102        convert(int,sum(case                                                                                                                                                                                       
103              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
104                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
105                   indent_step = '00' then                                                                                                                                                                         
106               t1.totalpay                                                                                                                                                                                            
107              else                                                                                                                                                                                                 
108               0                                                                                                                                                                                                   
109            end) -                                                                                                                                                                                                 
110         sum(case                                                                                                                                                                                                  
111              when indentdate >= '2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59'and t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
112                   t2.modifieddate <= '2015-11-28 23:59:59'                                                                           
113                    and t1.indentstatus='020' and indenttype = 0 and                                                                                                                                                    
114                   indent_step = '00' then                                                                                                                                                                         
115               t1.totalpay                                                                                                                                                                                            
116              else                                                                                                                                                                                                 
117               0                                                                                                                                                                                                   
118            end)                                                                                                                                                                                                   
119            -sum(case                                                                                                                                                                                              
120              when                                                                                                                                                                                                 
121                   indentdate >= '2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59'   and                                                                              
122                      t1.indentstatus='050' and financedate >= '2015-11-28 00:00:00' and                                                                                
123                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
124                   indent_step = '00' then                                                                                                                                                                         
125               t1.totalpay                                                                                                                                                                                            
126              else                                                                                                                                                                                                 
127               0                                                                                                                                                                                                   
128            end)+sum(case                                                                                                                                                                                          
129              when                                                                                                                                                                                                 
130                 indentdate >= '2015-11-28 00:00:00' and indentdate <= '2015-11-28 23:59:59'   and t1.indentstatus IN ('111','112')  and financedate >= '2015-11-28 00:00:00' and                                                                            
131                   financedate <= '2015-11-28 23:59:59' and indenttype = 1  then                                                                                       
132               t1.totalpay                                                                                                                                                                                            
133              else                                                                                                                                                                                                 
134               0                                                                                                                                                                                                   
135            end)) totalpay4, --應結算金額                                                                                                                                                                          
136                                                                                                                                                                                                                   
137                 sum(case                                                                                                                                                                                                   
138              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
139                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
140                   indent_step = '00' and status=2 then                                                                                                                                                            
141               1                                                                                                                                                                                                   
142              else                                                                                                                                                                                                 
143               0                                                                                                                                                                                                   
144            end) -                                                                                                                                                                                                 
145         sum(case                                                                                                                                                                                                  
146              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
147                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
148                   curstep_id = '2A9B4B' and status=2 and indenttype = 0 and                                                                                                                                       
149                   indent_step = '00' then                                                                                                                                                                         
150                1                                                                                                                                                                                                  
151              else                                                                                                                                                                                                 
152               0                                                                                                                                                                                                   
153            end)                                                                                                                                                                                                   
154            -sum(case                                                                                                                                                                                              
155              when                                                                                                                                                                                                 
156                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
157                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
158                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 0 and                                                                            
159                   indent_step = '00' then                                                                                                                                                                         
160               1                                                                                                                                                                                                   
161              else                                                                                                                                                                                                 
162               0                                                                                                                                                                                                   
163            end)-sum(case                                                                                                                                                                                          
164              when                                                                                                                                                                                                 
165                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
166                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 1  then                                                                          
167               1                                                                                                                                                                                                   
168              else                                                                                                                                                                                                 
169               0                                                                                                                                                                                                   
170            end) totalcount5,                                                                                                                                                                                      
171                                                                                                                                                                                                                   
172         convert(int,sum(case                                                                                                                                                                                      
173              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
174                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
175                   indent_step = '00' and status=2 then                                                                                                                                                            
176               cust_partner_value                                                                                                                                                                                  
177              else                                                                                                                                                                                                 
178               0                                                                                                                                                                                                   
179            end) -                                                                                                                                                                                                 
180         sum(case                                                                                                                                                                                                  
181              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
182                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
183                   curstep_id = '2A9B4B' and status=2 and indenttype = 0 and                                                                                                                                       
184                   indent_step = '00' then                                                                                                                                                                         
185                cust_partner_value                                                                                                                                                                                 
186              else                                                                                                                                                                                                 
187               0                                                                                                                                                                                                   
188            end)                                                                                                                                                                                                   
189            -sum(case                                                                                                                                                                                              
190              when                                                                                                                                                                                                 
191                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
192                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
193                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 0 and                                                                            
194                   indent_step = '00' then                                                                                                                                                                         
195               cust_partner_value                                                                                                                                                                                  
196              else                                                                                                                                                                                                 
197               0                                                                                                                                                                                                   
198            end)-sum(case                                                                                                                                                                                          
199              when                                                                                                                                                                                                 
200                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
201                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 1  then                                                                          
202               cust_partner_value                                                                                                                                                                                  
203              else                                                                                                                                                                                                 
204               0                                                                                                                                                                                                   
205            end))  totalpay5,                                                                                                                                                                                      
206        sum(case                                                                                                                                                                                                   
207              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
208                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
209                   indent_step = '00' then                                                                                                                                                                         
210               1                                                                                                                                                                                  
211              else                                                                                                                                                                                                 
212               0                                                                                                                                                                                                   
213            end) -                                                                                                                                                                                                 
214         sum(case                                                                                                                                                                                                  
215              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
216                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
217                   curstep_id = '2A9B4B' and indenttype = 0 and                                                                                                                                                    
218                   indent_step = '00' then                                                                                                                                                                         
219                1                                                                                                                                                                                 
220              else                                                                                                                                                                                                 
221               0                                                                                                                                                                                                   
222            end)                                                                                                                                                                                                   
223            -sum(case                                                                                                                                                                                              
224              when                                                                                                                                                                                                 
225                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
226                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
227                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
228                   indent_step = '00' then                                                                                                                                                                         
229               1                                                                                                                                                                                  
230              else                                                                                                                                                                                                 
231               0                                                                                                                                                                                                   
232            end)-sum(case                                                                                                                                                                                          
233              when                                                                                                                                                                                                 
234                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
235                   financedate <= '2015-11-28 23:59:59' and indenttype = 1  then                                                                                       
236               1                                                                                                                                                                                  
237              else                                                                                                                                                                                                 
238               0                                                                                                                                                                                                   
239            end) - (sum(case                                                                                                                                                                                       
240              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
241                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
242                   indent_step = '00' and status=2 then                                                                                                                                                            
243               1                                                                                                                                                                                                   
244              else                                                                                                                                                                                                 
245               0                                                                                                                                                                                                   
246            end) -                                                                                                                                                                                                 
247         sum(case                                                                                                                                                                                                  
248              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
249                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
250                   curstep_id = '2A9B4B' and status=2 and indenttype = 0 and                                                                                                                                       
251                   indent_step = '00' then                                                                                                                                                                         
252                1                                                                                                                                                                                                  
253              else                                                                                                                                                                                                 
254               0                                                                                                                                                                                                   
255            end)                                                                                                                                                                                                   
256            -sum(case                                                                                                                                                                                              
257              when                                                                                                                                                                                                 
258                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
259                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
260                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 0 and                                                                            
261                   indent_step = '00' then                                                                                                                                                                         
262               1                                                                                                                                                                                                   
263              else                                                                                                                                                                                                 
264               0                                                                                                                                                                                                   
265            end)-sum(case                                                                                                                                                                                          
266              when                                                                                                                                                                                                 
267                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
268                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 1  then                                                                          
269               1                                                                                                                                                                                                   
270              else                                                                                                                                                                                                 
271               0                                                                                                                                                                                                   
272            end)) totalcount6,                                                                                                                                                                                     
273        convert(int,sum(case                                                                                                                                                                                       
274              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
275                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
276                   indent_step = '00' then                                                                                                                                                                         
277               cust_partner_value                                                                                                                                                                                  
278              else                                                                                                                                                                                                 
279               0                                                                                                                                                                                                   
280            end) -                                                                                                                                                                                                 
281         sum(case                                                                                                                                                                                                  
282              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
283                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
284                   curstep_id = '2A9B4B' and indenttype = 0 and                                                                                                                                                    
285                   indent_step = '00' then                                                                                                                                                                         
286                cust_partner_value                                                                                                                                                                                 
287              else                                                                                                                                                                                                 
288               0                                                                                                                                                                                                   
289            end)                                                                                                                                                                                                   
290            -sum(case                                                                                                                                                                                              
291              when                                                                                                                                                                                                 
292                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
293                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
294                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
295                   indent_step = '00' then                                                                                                                                                                         
296               cust_partner_value                                                                                                                                                                                  
297              else                                                                                                                                                                                                 
298               0                                                                                                                                                                                                   
299            end)-sum(case                                                                                                                                                                                          
300              when                                                                                                                                                                                                 
301                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
302                   financedate <= '2015-11-28 23:59:59' and indenttype = 1  then                                                                                       
303               cust_partner_value                                                                                                                                                                                  
304              else                                                                                                                                                                                                 
305               0                                                                                                                                                                                                   
306            end)-(sum(case                                                                                                                                                                                         
307              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
308                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
309                   indent_step = '00' and status=2 then                                                                                                                                                            
310               cust_partner_value                                                                                                                                                                                  
311              else                                                                                                                                                                                                 
312               0                                                                                                                                                                                                   
313            end) -                                                                                                                                                                                                 
314         sum(case                                                                                                                                                                                                  
315              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
316                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
317                   curstep_id = '2A9B4B' and status=2 and indenttype = 0 and                                                                                                                                       
318                   indent_step = '00' then                                                                                                                                                                         
319                cust_partner_value                                                                                                                                                                                 
320              else                                                                                                                                                                                                 
321               0                                                                                                                                                                                                   
322            end)                                                                                                                                                                                                   
323            -sum(case                                                                                                                                                                                              
324              when                                                                                                                                                                                                 
325                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
326                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
327                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 0 and                                                                            
328                   indent_step = '00' then                                                                                                                                                                         
329               cust_partner_value                                                                                                                                                                                  
330              else                                                                                                                                                                                                 
331               0                                                                                                                                                                                                   
332            end)-sum(case                                                                                                                                                                                          
333              when                                                                                                                                                                                                 
334                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
335                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 1  then                                                                          
336               cust_partner_value                                                                                                                                                                                  
337              else                                                                                                                                                                                                 
338               0                                                                                                                                                                                                   
339            end))) totalpay6                                                                                                                                                                                       
340  from tabcindent t1 left join workorder2 t2 on t1.relation_id=t2.workorder_guid                
341  --left join customer t4 on  t1.customer_guid = t4.customer_guid                                 
342  left join tvmedia t3 on  t1.cust_media_id=t3.idkey --and t1.cust_partner_guid=t3.partner_guid   
343  where t1.web_flag=1 and  cust_media_id in ('67B3CB84-81F4-87AA-01EB-857EA1474223','CFC5A634-2375-1552-59B4-9A1263DCFCA4','673473E7-8079-68ED-3CB6-9A2256E34A67','E6192562-FCF8-415C-0AC4-9A22A6200706','542CF17F-374E-627D-389B-9A22F09BC4D3','A270E30B-368B-F962-F44F-AA0D76E8865E')                                                                    

2.經過SQL語句進行查詢當天結算曆史的記錄框架

  1 select                                                                                                                                                                         
  2        convert(int,sum(case when indentdate >= '2015-11-28 00:00:00' and                                                                                            
  3                   indentdate <= '2015-11-28 23:59:59' and                                                                                                             
  4                   indenttype = 0 and indent_step = '00' then                                                                                                                                                      
  5               t1.totalpay else 0 end)) pay1 ,                                                                                                                                         
  6        convert(int,sum(case when t1.indentdate>= '2015-11-28 00:00:00' and                                                                                          
  7                   t1.indentdate <= '2015-11-28 23:59:59' and t2.modifieddate >= '2015-11-28 00:00:00' and               
  8                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
  9                   curstep_id = '2A9B4B' and indenttype = 0 and                                                                                                                                                    
 10                   indent_step = '00' then                                                                                                                                                                         
 11               t1.totalpay  else 0 end)                                                                                                                                                                               
 12            + sum(case when t1.indentdate>= '2015-11-28 00:00:00' and                                                                                                
 13                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
 14                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
 15                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 16                   indent_step = '00' then                                                                                                                                                                         
 17               t1.totalpay  else 0 end)) +                                                                                                                                               
 18        convert(int,sum(case                                                                                                                                                                                       
 19              when t1.indentdate<= '2015-11-28 00:00:00' and t2.modifieddate >= '2015-11-28 00:00:00' and              
 20                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
 21                   curstep_id = '2A9B4B' and indenttype = 0 and                                                                                                                                                    
 22                   indent_step = '00' then                                                                                                                                                                         
 23               t1.totalpay                                                                                                                                                                                            
 24              else                                                                                                                                                                                                 
 25               0                                                                                                                                                                                                   
 26            end)+                                                                                                                                                                                                  
 27        sum(case                                                                                                                                                                                                   
 28              when                                                                                                                                                                                                 
 29                   indentdate <= '2015-11-28 00:00:00' and workorderstatus = 'FAILED' and                                                                            
 30                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
 31                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 32                   indent_step = '00' then                                                                                                                                                                         
 33               t1.totalpay                                                                                                                                                                                            
 34              else                                                                                                                                                                                                 
 35               0                                                                                                                                                                                                   
 36            end)-sum(case                                                                                                                                                                                          
 37              when                                                                                                                                                                                                 
 38                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
 39                   financedate <= '2015-11-28 23:59:59' and indenttype = 1  then                                                                                       
 40               t1.totalpay                                                                                                                                                                                            
 41              else                                                                                                                                                                                                 
 42               0                                                                                                                                                                                                   
 43            end)) pay2, --歷史失效金額                                                                                                                                                                        
 44        convert(int,sum(case                                                                                                                                                                                       
 45              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
 46                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
 47                   indent_step = '00' then                                                                                                                                                                         
 48               cust_partner_value                                                                                                                                                                                  
 49              else                                                                                                                                                                                                 
 50               0                                                                                                                                                                                                   
 51            end) -                                                                                                                                                                                                 
 52         sum(case                                                                                                                                                                                                  
 53              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
 54                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
 55                   curstep_id = '2A9B4B' and indenttype = 0 and                                                                                                                                                    
 56                   indent_step = '00' then                                                                                                                                                                         
 57                cust_partner_value                                                                                                                                                                                 
 58              else                                                                                                                                                                                                 
 59               0                                                                                                                                                                                                   
 60            end)                                                                                                                                                                                                   
 61            -sum(case                                                                                                                                                                                              
 62              when                                                                                                                                                                                                 
 63                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
 64                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
 65                   financedate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                         
 66                   indent_step = '00' then                                                                                                                                                                         
 67               cust_partner_value                                                                                                                                                                                  
 68              else                                                                                                                                                                                                 
 69               0                                                                                                                                                                                                   
 70            end)-sum(case                                                                                                                                                                                          
 71              when                                                                                                                                                                                                 
 72                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
 73                   financedate <= '2015-11-28 23:59:59' and indenttype = 1  then                                                                                       
 74               cust_partner_value                                                                                                                                                                                  
 75              else                                                                                                                                                                                                 
 76               0                                                                                                                                                                                                   
 77            end)-(sum(case                                                                                                                                                                                         
 78              when indentdate >= '2015-11-28 00:00:00' and                                                                                                           
 79                   indentdate <= '2015-11-28 23:59:59' and indenttype = 0 and                                                                                          
 80                   indent_step = '00' and status=2 then                                                                                                                                                            
 81               cust_partner_value                                                                                                                                                                                  
 82              else                                                                                                                                                                                                 
 83               0                                                                                                                                                                                                   
 84            end) -                                                                                                                                                                                                 
 85         sum(case                                                                                                                                                                                                  
 86              when t2.modifieddate>= '2015-11-28 00:00:00' and                                                                                                       
 87                   t2.modifieddate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                         
 88                   curstep_id = '2A9B4B' and status=2 and indenttype = 0 and                                                                                                                                       
 89                   indent_step = '00' then                                                                                                                                                                         
 90                cust_partner_value                                                                                                                                                                                 
 91              else                                                                                                                                                                                                 
 92               0                                                                                                                                                                                                   
 93            end)                                                                                                                                                                                                   
 94            -sum(case                                                                                                                                                                                              
 95              when                                                                                                                                                                                                 
 96                   indentdate <= '2015-11-28 23:59:59' and workorderstatus = 'FAILED' and                                                                              
 97                   curstep_id = '5CB9E0' and financedate >= '2015-11-28 00:00:00' and                                                                                
 98                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 0 and                                                                            
 99                   indent_step = '00' then                                                                                                                                                                         
100               cust_partner_value                                                                                                                                                                                  
101              else                                                                                                                                                                                                 
102               0                                                                                                                                                                                                   
103            end)-sum(case                                                                                                                                                                                          
104              when                                                                                                                                                                                                 
105                   workorderstatus = 'CLOSE' and financedate >= '2015-11-28 00:00:00' and                                                                            
106                   financedate <= '2015-11-28 23:59:59' and status=2 and indenttype = 1  then                                                                          
107               cust_partner_value                                                                                                                                                                                  
108              else                                                                                                                                                                                                 
109               0                                                                                                                                                                                                   
110            end))) pay4                                                                                                                                                                                       
111  from tabcindent t1 left join workorder2 t2 on t1.relation_id=t2.workorder_guid                
112  --left join customer t4 on  t1.customer_guid = t4.customer_guid                                 
113  left join tvmedia t3 on  t1.cust_media_id=t3.idkey --and t1.cust_partner_guid=t3.partner_guid   
114  where t1.web_flag=1 and  cust_media_id in ('CFC5A634-2375-1552-59B4-9A1263DCFCA4')                                                                    

 

3.對於這樣的複雜的SQL進行大數據量的查詢如何優化SQL確實是一個問題,可是我一般是這樣作的,雖然沒有辦法解決根本問題可是,效果仍是有的。性能

4.一般我會創建須要的索引,來增長查詢的速度。儘可能的避免內嵌的查詢由於這真的是影響效率。大數據

5.那麼當這些工做都作完後優化的做用不大了,那麼我一般會在數據庫上面進行動手腳,創建數據庫集羣進行數據庫的讀寫的分離,而後進行創建數據庫快照進行數據庫的數據的映射。優化

6.若是此時的方法不行那麼建立分區,以及創建臨時表卻是一個不錯的選擇。ui

7.儘可能的避免表與表之間過多的交差,此時寧願數據庫中的表格的字段冗餘一些,也不要太多的交差,JOIN ,LEFT JOIN 真的影響查詢的效率。spa

8.經過上面描述的方法,優化後數據庫的表的結構以及數據庫幾百行的SQL語句查詢的效率確實變快了。只不過折磨多的SQL語句只能經過code

建立存儲過程了。而後在應用ADO.NET 參數化SQL 進行訪問了。

9.若是您有好的方法能夠隨時的交流,畢竟我對於數據庫方面的經驗還不足。

以上內容,所有都是原創,如需轉載,請標明!謝謝!

相關文章
相關標籤/搜索