![](/img/trans.png)
[英]How to pull a SQL Server table into memory in order to run queries against it
[英]How to run multiple queries against SQL Server?
我已经阅读并实现了几个不同版本的 Microsoft 建议的查询 SQL Server 数据库的方法。 在我读过的所有内容中,每个查询都被 using 语句包围,例如在某些方法DoQuery
:
List<List<string>> DoQuery(string cStr, string query)
{
using(SqlConnection c = new SqlConnection(cStr))
{
c.Open();
using(SqlCommand cmd = new SqlCommand(queryStr, c))
{
using(SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read() )
{
...
//read columns and put into list to return
}
// close all of the using blocks
}
}
}
// return the list of rows containing the list of column values.
}
我需要针对同一数据库的不同查询字符串运行此代码数百次。 似乎每次创建一个新连接效率低下,每次丢弃它都是浪费。
我应该如何构建它以使其有效? 当我尝试不使用 using 块并将连接传递到DoQuery
方法时,我收到有关连接尚未关闭的消息。 如果我在查询后关闭它,那么我会收到有关它未打开的消息。
我也在努力改进这一点,因为我总是变得有些随机
IOException: 无法从传输连接读取数据:非阻塞套接字上的操作将阻塞。
目前我是数据库的唯一用户,我没有在多线程或异步等中做任何事情。只是循环查询字符串并在它们上运行DoQuery
。
我的结构是否可能是该问题的一部分,即没有足够快地释放资源,从而导致连接被阻塞?
我被困在效率和这个阻塞问题上。 提前致谢。
事实证明,查询结构很好,查询也很好。 问题是我在每个查询上都有一个“按 X 描述排序”,并且该列没有编入索引。 这会导致全表扫描对行进行排序,即使只返回 2。该表有大约 300 万行,我认为它可以比它更好地处理。 它超时了 360 秒连接超时! 我为该列建立了索引,不再有“阻塞”废话,顺便说一句,当它实际上是超时时,这是一条可怕的消息。 如果我索引出现在 where 子句中的每一列,查询现在可以正常运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.