【发布时间】:2011-10-01 13:13:17
【问题描述】:
查询返回 2100 万条记录
我遍历这张表的方式需要很长时间。还有哪些其他解决方案?
SqlDataReader rd = DbInfo.DataRdr(Conn,
"SELECT a.NAME AS ANAME, b.NAME AS BNAME, a.ID as AID, b.ID AS BUD " +
"FROM myTable a JOIN myTable b ON a.NUM = b.NUM AND a.ID <> b.ID");
while (rd.Read())
{
if (rd["ANAME"].ToString().LevenshteinDistance(rd["BNAME"].ToString()) <= 10)
{
Logging.Write(...);
}
}
public static int LevenshteinDistance(this string s, string t)
{
if (s == null)
throw new ArgumentNullException("s");
if (t == null)
throw new ArgumentNullException("t");
int n = s.Length;
int m = t.Length;
int[,] d = new int[n+1,m+1];
if (n == 0 || m == 0)
return Math.Max(m, n);
for (int i = 0; i <= n; i++)
{
d[i, 0] = i;
}
for (int i = 0; i < m; i++)
{
d[0, i] = i;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
int cost = (t[j] == s[i]) ? 0 : 1;
d[i + 1, j + 1] = Math.Min(Math.Min(d[i, j + 1] + 1, d[i + 1, j] + 1), d[i, j] + cost);
}
}
return d[n, m];
}
【问题讨论】:
-
SELECT * 不好开始。您有机会改进查询吗?
-
我们能看到 LevenshteinDistance 函数的代码吗?
-
@John haha... 他大概的意思是其中一个应该是“j”。
-
我是哪个? :P 好的,我修好了
-
不会更快,但值得注意的是,这在纯 SQL 中是可能的:sqlteam.com/forums/topic.asp?TOPIC_ID=51540&whichpage=1
标签: c# .net sql string-comparison