如何使用数千条记录更快地进行指纹选择?

Dan*_*Boy 5 c# t-sql sql-server biometrics

这是我第一次在这里问一些我似乎无法找到答案的问题.基本上,我创建了一个系统,可以接受一个人的指纹并将他/她登录到系统中.但随着时间的推移,我有数千条记录,指纹搜索变得比以往慢得多.

我所做的基本过程就是从表中选择所有生物识别数据,在我的代码中,我使用foreach循环逐个进行,因为指纹模板将其比较为教,直到它得到正确的.

你能提供一些提示让我的选择更快吗?任何帮助,将不胜感激.

using (conn = new SqlConnection(connString)) {
    conn.Open();
     using (comm = new SqlCommand("EXEC dbn.sp_opd_selectBiometrics", conn)) {
        using (adap = new SqlDataAdapter(comm)) {
           using (dt = new DataTable()) {
                adap.Fill(dt);
                  if (dt.Rows.Count > 0) {
                    foreach (DataRow dr in dt.Rows) {
                     //Deserialize fingerprint template to bytes for verification
                       try {
                          byte[] _img = (byte[])dr["biometrics"];
                          string byteBiometrics = Encoding.UTF8.GetString(_img, 0, _img.Length);
                          getHcode = (string)dr["hpercode"];
                          MemoryStream ms = new MemoryStream(_img);

                           Template = new DPFP.Template();
                           Template.DeSerialize(ms);
                           Verificator = new DPFP.Verification.Verification();
// more code here...
       }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

got*_*tqn 2

通过文本搜索通常很慢,如果文本很大且数据量很大,则速度会变得更慢。.net我怀疑您在比较纯解决方案的背景下会得到更好的解决方案T-SQL

步骤如下:

  1. 更改您的表格并添加bio-metrics-hash
  2. 在此列上创建非聚集索引
  3. 使用所有生物识别数据创建一个字符串,计算该值的哈希值并填充当前记录的新列(更新数据)
  4. 当新记录创建/更新时,自动计算相应的哈希值

您已准备好进行搜索。

在您的应用程序中,使用输入参数调用存储过程bio-metrics-data。在该过程中,计算了该值的哈希值并仅通过哈希值进行搜索。

请注意,根据您的生物识别数据大小,您可能需要使用不同的方法,但想法是相同的。

在 SQL Server 2016 + 中,HASHBYTES函数允许最大值作为参数。