mssql / php - 循环结果集并有效地执行新查询 - 内存表?

时间:2012-08-23 07:44:28

标签: php sql-server in-memory

我对MSSQL很新,并且从未使用过内存表,并且我不能100%确定这是否是我需要的。

我有一个查询结果集(无法修改),我遍历并显示每一行数据。对于结果集的一个字段,我需要执行查询以获取该字段的相关显示数据。问题是我可能不得不在循环中调用此查询1000次,具体取决于结果集中有多少行。

有人可以建议如何有效地做到这一点吗?我听说过In Memory表,我想知道这是否是我需要的?如果是这样我从哪里开始?或者我只是存储在一个数组或什么?

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

Declare @Test_Memory_Table Table
(
/* Fields needed for lookup; use same datatypes as schema */ 
IndexOrPkFieldName Numeric(19,0),
Field1 varchar(255),
Field2 date
)

Insert into @Test_Memory_Table Select t2.Field1 as field1, t1.field2 as Field2, CONVERT(char(10),t3.Field3, 101) as Field3 
                 From   Table1 t1 
                 INNER JOIN Table2 t2 on t1.pkId = t2.pkId and isnull(t2.IS_ACTIVE,0) = 1  and ISNULL(t2.TYPE, 0) > 0 
                 INNER JOIN Table3 t3 on t2.pkId = t3.pkId

select * from @Test_Memory_Table

只需在SSMS中测试查询,然后查看计划以查看返回内存表查询所需的时间与直接查询表所需的时间。请记住,ssms可能比生产更快,因为ssms中的提示默认(例如arithabort),但在查询.net客户端时可能不会这样设置。如果你的桌子很小,我希望差异是微不足道的。