我有一个SQL Server表,大约有300,000,000个绝对UNC路径,我正在尝试(快速)验证每个路径,以确保SQL Server表中的路径实际上作为磁盘上的文件存在.
从表面上来看,我正在以50,000个批量查询表格,然后递增一个计数器来推进我的批次.
然后,我使用数据读取器对象来存储我当前的批处理集并循环遍历批处理,使用File.Exists(path)命令检查每个文件,如下例所示.
问题是,我正在处理大约.四核心3.4ghz i5最大每秒1000个文件,16GB内存,这需要几天时间.有更快的方法吗?
我在SQL Server表上有一个列存储索引,我已对它进行了分析.我在<1s中获得了50k的批量记录,因此在向.net控制台应用程序发布批次时,这不是SQL瓶颈.
while (counter <= MaxRowNum)
{
command.CommandText = "SELECT id, dbname, location FROM table where ID BETWEEN " + counter + " AND " + (counter+50000).ToString();
connection.Open();
using (var reader = command.ExecuteReader())
{
var indexOfColumn1 = reader.GetOrdinal("ID");
var indexOfColumn2 = reader.GetOrdinal("dbname");
var indexOfColumn3 = reader.GetOrdinal("location");
while (reader.Read())
{
var ID = reader.GetValue(indexOfColumn1);
var DBName = reader.GetValue(indexOfColumn2);
var Location = reader.GetValue(indexOfColumn3);
if (!File.Exists(@Location.ToString()))
{
//log entry to logging table
}
} …Run Code Online (Sandbox Code Playgroud)