SQL Server分表查詢


  今天主管讓測試大數據量查詢的問題(數據條數上3000萬),我解決的思路是將表拆分成多張表來減少查詢時間

那么涉及到多表之間的聯合查詢怎么查,怎么實現才能達到效率最大化。

  思路:1、根據分表邏輯查詢,這個比較簡單用動態SQL語句就可以實現

  我的分表邏輯是根據字段CardNumber末尾數字拆分的,將其拆分為0-9這十張表。

1 DECLARE @CardNumber  VARCHAR(50)
2 DECLARE @Index AS VARCHAR(1)
3 DECLARE @sql AS VARCHAR(1000)
4 
5 SET @Index = RIGHT(@CardNumber,1)    
6 
7 SET @sql = N'select * from dbo.Customer_' + @Index +' Where CardNumber='''+@CardNumber+''''    
8 
9 EXEC(@sql)

   這個比較簡單,數度也相對很快,百萬級的數量查詢時間在5秒內。

  2.如果查詢條件和分表邏輯關系不大,那么聯合查詢就比較麻煩了。我的思路是判斷當第一張表里不存在,進入第二張表,第二張表里不存在進入第三張...以此類推。

  

 1 CREATE TABLE #Temp_Customer(
 2         [CustomerID] int,
 3         [CustomerName] varchar(50),
 4         [CardNumber] varchar(100),
 5         [CardNo] varchar(100) NULL
 6     )
10 
11 DECLARE @tableIndex INT 
12 
13 SET @tableIndex = 0
14 
15 WHILE (@tableIndex < 10)
16 BEGIN    
17        SET @sql = N'select * from dbo.Customer_' +CAST(@tableIndex AS VARCHAR(1))
18 
19 
20 IF(@CardNo IS NOT NULL)
21 BEGIN
22     SET @sql = @sql +' Where CardNo='''+ @CardNo +''''
23 END    
24 
25  INSERT INTO #Temp_Customer
26                     ( CustomerID ,
27                       CustomerName ,
28                       CardNumber ,
29                       CardNo                       
30                     ) 
31                      EXEC(@sql)
32 
33    DECLARE @i int 
34    SET  @i = (SELECT COUNT(*) FROM #Temp_Customer)
35    IF (@i>0)
36    BEGIN
37     SET  @tableIndex = 10
38    END
39   ELSE
40   BEGIN                            
41     SET  @tableIndex = @tableIndex + 1
42    END
43 END
44 
45             

  這種辦法的弊端顯然易見,如果數據恰巧在最后一張表里面,那么查詢肯定會非常慢。但是現在我還沒有想到好的解決辦法。

特留下此筆記,等待解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM