0

在使用 SqlClient 获取排序结果集时,我昨天在 c# 中遇到了奇怪的情况。

以 SQL 查询为例:

SELECT Num, Name FROM Customer WHERE Num LIKE '%V%' OR Name LIKE '%V%' ORDER BY Num ASC

在这种特殊情况下,要订购的结果集大约有 100 行长。

问题如下:如果我在 sql-server 本身上运行查询,它会非常快!结果几乎在我单击“运行查询”的那一刻显示。但是当我使用 SqlClient 在 C# 中运行查询时,速度非常慢(大约 5-10 秒)。我对程序的每一小部分进行了基准测试,发现连接到 sql-server 大约需要 10 毫秒,因此两台机器之间的链接不会是问题。

我几乎尝试了所有方法,直到我发现,如果我从查询中删除 ORDER BY Num ASC,使用 SqlClient 的 C# 查询返回的结果几乎与直接在 sql-server 上运行查询一样快。

所以我的问题是:与 sql-server 本身相比,C# 中的 SqlClient 到底在用 ORDER BY 做什么来将使用时间乘以数百万?=)

4

3 回答 3

0

在这里查看关于同一主题的良好描述:http: //social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/aa4537ed-fb69-441d-82d3-0216f497f995

此查询可能会帮助您发现 SSMS 和您的应用程序之间的差异。

SELECT * FROM sys.dm_exec_connections;

看看@这个以及http://forums.asp.net/t/917652.aspx

于 2011-01-21T09:48:11.890 回答
0

很抱歉占用您的时间,我自己发现了问题。我使用了不同的数据库(在 sql-server 本身上测试查询时快速和优化的生产数据库以及 c# 中缓慢的非优化开发数据库)。-.-

于 2011-01-21T10:30:47.350 回答
0

尝试依次运行两次查询,看看是否有时间差。这将确定是连接还是查询需要时间。

当您测量连接需要多长时间时,您只是在测量您的想法的一部分。直到您需要它,即运行第一个查询时,才开始与数据库的实际会话。

于 2011-01-21T09:35:06.380 回答