在使用 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 做什么来将使用时间乘以数百万?=)