这是从临时表中进行的简单选择,在其主键上加入现有表,两个子选择使用 top 1 引用连接表。
在代码中:
SELECT
TempTable.Col1,
TempTable.Col2,
TempTable.Col3,
JoinedTable.Col1,
JoinedTable.Col2,
(
SELECT TOP 1
ThirdTable.Col1 -- Which is ThirdTable's Primary Key
FROM
ThirdTable
WHERE
ThirdTable.SomeColumn = JoinedTable.SomeColumn
) as ThirdTableColumn1,
(
SELECT TOP 1
ThirdTable.Col1 -- Which is also ThirdTable's Primary Key
FROM
ThirdTable
WHERE
ThirdTable.SomeOtherColumn = JoinedTable.SomeColumn
) as ThirdTableColumn2,
FROM
#TempTable as TempTable
LEFT JOIN
JoinedTable
ON (TempTable.PKColumn1 = JoinedTable.PKColumn1 AND
TempTable.PKColumn2 = JoinedTable.PKColumn2)
WHERE
JoinedTable.WhereColumn IN (1, 3)
Run Code Online (Sandbox Code Playgroud)
这是我的查询的精确副本。
如果我删除两个子选择,它运行得很好而且很快。通过两个子选择,我每秒得到大约 100 条记录,这对于这个查询来说非常慢,因为它应该返回近一百万条记录。
我已经检查过是否每张表都有一个主键,他们都有。它们都有重要列的索引和统计信息,就像那些 WHERE 子句中的那些,以及 JOIN …
我希望大家就以下情况给我提示和建议:
我们正在考虑将 Microsoft 的 SQL Server 2008 R2 Express 用于商业 Web 应用程序。
Web 应用程序不会有超过 10 个 CRUD,并且不会有很高的数据流量,它们都是简单的 Web 表单。关于数据的可扩展性,Web Application 基本上专注于员工数据,如个人信息、空缺控制和日常频率控制。
据我所知,我估计最多 5 个同时用户,产生数据流量。
而且,我们的员工表最多应该保存 100 条记录。
至于物理限制,我认为我们很好,因为我认为在接下来的十年里,最多 100 名员工不应生成 10 GB?但是因为我读到 Express 版本只管理 1 GB 的 RAM 并且只使用 1 个 CPU,所以我认为最好问一下。
在这种情况下,您认为它可以保持良好的响应和性能吗?
所以请建议使用 SQL Server 2008 R2 Express 或其他一些数据库管理器。请记住,它必须是免费的。
附加信息:
视窗服务器 2008;
4 GB 内存;
1 TB 高清。