我有一个这样的组织表:
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
我有一个存储过程来为项目创建动态表。
如果成功创建了任何新组织,那么我们调用存储过程为该组织创建项目表。
每个组织都有自己的项目表。因此项目表名称对于每个组织都是动态的,它的名称存储在组织表中。
组织1 - >项目表
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
组织2 - >项目表
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
我目前正致力于整合搜索功能。用户或匿名用户可以根据以下逻辑搜索数据:
我知道找到组织名称和邀请代码的搜索结果非常简单,因为所有内容都驻留在同一个表格中。
但由于动态表名,获取项目(名称或邀请代码)的搜索结果会更复杂。我在How to fetch data from dynamic multiple tables?找到了这个链接,所以我认为这不是一个更好的解决方案,因为搜索需要非常快。
我们之所以基于组织分离项目表是因为在我们的要求中他们明确提到“我们有1000000个组织,但每个组织有超过100万个项目”。希望您理解我们不希望在单个表中转储1000000(组织)* 1百万= XXXXXX项目的概念。
问题:
工具和技术:
答案 0 :(得分: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')
), '</DELIMITER><DELIMITER>', '
UNION ALL
'), '</DELIMITER>', '')
,'<DELIMITER>', 'CREATE VIEW Organization_Projects
AS
')
对源表的查询效率必须非常接近。
答案 1 :(得分:2)
如果您想要更快的查找,可以通过在写入/插入时间内进行妥协来实现。 以下三点:
首先,正如你所说的那样直截了当。让我们看看2和3.我会建议一种通用的方法,你可以通过它来处理这两个点,让我们以地址为例。
在上面的场景中,您将搜索非常少的地址行数。同样,为每个查询术语创建两个表,如项目名称,项目邀请代码,城市,州和国家。