如何优化linq查询数据来自两个不同的数据库?

时间:2016-06-03 12:33:36

标签: c# asp.net-mvc linq

总结:我必须在当前日期显示访问该餐馆的列表,因为我从数据库1查询了两个不同的数据库,我有两个表(TH_Order和GS_booking)和第二个数据库(CustomerFeedback) 我现在在做什么是

<?php
$html = <<<EOF
<html>
<a href="URL" title="{tt4438848=Nicholas Stoller (dir.), Seth Rogen, Rose Byrne, tt2567026=James Bobin (dir.), Mia Wasikowska, Johnny Depp, tt3498820=Anthony Russo (dir.), Chris Evans, Robert Downey Jr., tt2948356=Byron Howard (dir.), Ginnifer Goodwin, Jason Bateman, tt3385516=Bryan Singer (dir.), James McAvoy, Michael Fassbender, tt1985949=Clay Kaytis (dir.), Jason Sudeikis, Josh Gad, tt3068194=Whit Stillman (dir.), Kate Beckinsale, Chloë Sevigny, tt3799694=Shane Black (dir.), Russell Crowe, Ryan Gosling, tt3040964=Jon Favreau (dir.), Neel Sethi, Bill Murray, tt2241351=Jodie Foster (dir.), George Clooney, Julia Roberts}">X-Men: Apocalypse</a>
</html>
EOF;

$dom = new DOMDocument();
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
    $title = $link->getAttribute('title');
    echo $title;
}
?>

所有这些表都有至少100K记录,此查询在应用程序服务器上需要40-50秒我想优化此查询任何帮助都可以理解。

3 个答案:

答案 0 :(得分:1)

您有不同的选择。

1.尝试使用存储过程

var result = context.Database
                .SqlQuery<type>("GetDataProc @param1", param1)
                .ToList();

但如果您需要快速解决,那么您只需在相关列上创建索引。

2.创建指数

CREATE INDEX index_name
ON table_name (column_name)

答案 1 :(得分:0)

我建议您通过存储过程在数据库级别上进行计算,并将所需结果返回到您的解决方案。 您可以通过让数据库服务器进行计算来节省大量时间。

答案 2 :(得分:0)

第一个服务器中的

Add the second server as a linked server对象,假设这是MSSQL。

添加服务器对象后,您需要创建查询远程服务器的本地视图。例如,假设SQL1是您的本地服务器,SQL2是远程服务器。在Management Studio中,在SQL1上,添加到SQL2的链接服务器连接。然后,您需要绕过Entity Framework的限制,该框架不直接支持链接服务器。在SQL1上为SQL2创建所需的每个数据集的视图,然后使用EF专门查询SQL1。 SQL Server将管理服务器端的跨数据库和跨服务器查询。这比为所有跨服务器查询创建存储过程灵活得多。如果SQL2支持更改通知,那么视图还会为您提供被动缓存机制,从而大大减少两个服务器之间的来回抖动。这完全绕过了EF的跨上下文查询限制。

实体框架(在V6之前,我认为他们在6.1中的相同上下文中添加了对多个数据库的支持)需要为每个数据库分别设置一个上下文,这会强制要求在本地实现两个上下文的查询,从而降低性能。客户端必须单独查询两个服务器,然后合并结果。使用链接的服务器和视图,客户端查询第一个服务器,服务器在单个上下文中运行。

如果两个数据库都在同一台服务器上,那么同样的策略也可以工作,只是没有链接服务器。创建在第一个数据库中查询第二个数据库的视图。