当前位置:  开发笔记 > 编程语言 > 正文

使用Microsoft SQL Server从动态表中搜索数据

如何解决《使用MicrosoftSQLServer从动态表中搜索数据》经验,为你挑选了1个好方法。

我有一个这样的组织表:

OrgID | OrgInviteCode | OrgName       | Status | ProjectTableName | InsertOn
-------------------------------------------------------------------------------------------
 1    | RC12T67       | Organization1 | Active |  Project1        | 2015-12-19 15:37:43.333
 2    | BC56uI7       | Organization2 | Active |  Project2        | 2015-12-19 15:37:43.333
 3    | ORG1456       | Organization3 | Active |  Project3        | 2015-12-19 15:37:43.333
 4    | ORG2856       | Organization4 | Active |  Project4        | 2015-12-19 15:37:43.333

我有一个存储过程来为项目创建动态表.

如果成功创建了任何新组织,那么我们调用存储过程为该组织创建项目表.

每个组织都有自己的项目表.因此项目表名称对于每个组织都是动态的,并且它的名称存储在组织表中.

Organization1 - >项目表

ProjectID | OrgID | ProjectName | ProjectInvideCode |   Address1        | Address2 |  City      |State    |   ZIP      |  Country
-------------------------------------------------------------------------------------------------------------------------------
1         |   1   |  Org1Proj1   |  XJ34590         | 235 Harrison St. |            | Syracuse  | AK      |  23456234    |  US
2         |   1   |  Org1Proj2   |  JKI8907         | 35 Sterling  St. |            | Syracuse  | NY      |  23456456    |  US

Organization2 - >项目表

ProjectID | OrgID | ProjectName | ProjectInvideCode |   Address1 | Address2 |  City       |State    |   ZIP    |  Country
-------------------------------------------------------------------------------------------------------------------------------
1         |   2   |  Org2Proj1   |  RUIO90          | 90 Ram St. |          | Los Angeles | CA    |  23456234    |  US
2         |   2   |  Org2Proj2   |  KLOP907         | 35 Wide St.|          | Chicago     | IL    |  23456456    |  US

我目前正致力于整合搜索功能.用户或匿名用户可以根据以下逻辑搜索数据:

使用组织名称或组织邀请代码进行搜索.

使用项目名称或项目邀请代码进行搜索.

搜索项目地址,城市,州,国家

我知道找到组织名称和邀请代码的搜索结果非常简单,因为所有内容都驻留在同一个表中.

但由于动态表名,获取项目的搜索结果(名称或邀请代码)会更复杂.我在如何从动态多表中获取数据中找到了这个链接?,所以我认为这不是一个更好的解决方案,因为搜索需要非常快.

我们之所以基于组织分离项目表是因为在我们的要求中他们明确提到"我们有1000000个组织,但每个组织有超过100万个项目".希望您理解我们不希望在单个表中转储1000000(组织)*1百万= XXXXXX项目的概念.

问题:

我们如何以有效的方式搜索项目数据?

我们的项目单独表概念是否最差?你有什么建议可以处理得更好吗?

在C#中有没有有效的方法?

工具和技术:

Asp.Net 4.5,C#

MVC 5

首先是实体框架代码

SQL Server 2012

Alex Yu.. 5

我认为您可以创建组合所有项目表的VIEW

SELECT
    REPLACE(
        REPLACE( 
            REPLACE(
            (
                SELECT DISTINCT 'SELECT * FROM Organization O JOIN ' 
                    + ProjectTableName  
                    + ' PT ON O.OrgId = PT.OrgId WHERE O.OrgId = ' + convert(varchar(10), OrgId) 
                    as [text()] FROM Organization
                FOR XML PATH ('DELIMITER')  
            ), '', ' 
            UNION ALL 
            '), '', '')
    ,'', 'CREATE VIEW Organization_Projects 
AS
')

对源表的查询效率必须非常接近.



1> Alex Yu..:

我认为您可以创建组合所有项目表的VIEW

SELECT
    REPLACE(
        REPLACE( 
            REPLACE(
            (
                SELECT DISTINCT 'SELECT * FROM Organization O JOIN ' 
                    + ProjectTableName  
                    + ' PT ON O.OrgId = PT.OrgId WHERE O.OrgId = ' + convert(varchar(10), OrgId) 
                    as [text()] FROM Organization
                FOR XML PATH ('DELIMITER')  
            ), '', ' 
            UNION ALL 
            '), '', '')
    ,'', 'CREATE VIEW Organization_Projects 
AS
')

对源表的查询效率必须非常接近.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有