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