0

我正在处理需要我比较行的每一列的任务。有很多方法可以实现,我很好奇,因为行数是一个很大的数字。所以在这里我通过例子来解释它。

---------------------------------------------------------------------
ID[P_K] | Name | Address | City | Gender | College
---------------------------------------------------------------------

所以上面是一个表的基本示例,它包含来自多个大学的学生的数据,现在我从外部来源获取一些数据,需要将其与我的数据库中的数据进行比较。以下是可能的方法。

  1. 我将where Id = <id>在我的代码中进行选择查询并一一匹配。

  2. 其他方式我可以做一个选择查询where ID = <id> and name = <name> and so on...

所以现在我的首选是第二个选项,因为复杂性较低。

现在继续前进,只有一件事在我的脑海中造成冲突。

问题:

查询这两个查询的复杂度(考虑 ID 作为主键):

  1. where Id = <id>

  2. where ID = <id> and name = <name> and so on...

我知道这个总数取决于 MySQL 算法,我搜索了很多没有找到 MySql 的 Select 算法。

如果有人可以分享 Select 算法,那将会很有帮助。

特定于算法:

该算法有两种工作方式:

  1. For number of rows { if(whereCondition1 && whereCondition2 .... && whereCondition<N>)}
    }

  2. for number of rows { if(whereCondition1){ //Result filter according whereCondition1 if(whereCondition2){ //Result filter according whereCondition2 . . and so on... } else { continue; } } else { continue; } }

现在第一个复杂度将是 O(n)。对于第二个假设 ID[P_K],将降低复杂性。正确的?

那么从上面哪个算法是用户?或不是这些?

4

2 回答 2

1

每个 RDBM 都有自己的选择算法,但所有这些都基于SQL ANSI 99模式。

这里的问题是 RDBMs 如何处理并解析它以获得更好的性能。您无需担心,您唯一需要担心的是您的数据库是否设计良好并具有适当的索引。

这就是使用where Id = <id>or之间的区别where ID = <id> and name = <name> and so on...

如果 ID 是该表的 PK,并且您谈到的外部源与您的数据同步(意思是:ID 具有相同的记录),您只需要使用where Id = <id>,但如果这些 ID 不同步,您应该定义什么将使您的注册表独一无二,而不是创建您的 sql 条件并确保您有适当的索引。

于 2014-07-15T12:14:48.073 回答
0

我不知道算法到底是如何工作的,但总的来说:

for(int i = 0, j = 0; i < N; ++i; ++j) {
   if (i==j) {
      /* do something */
   }
}

这具有复杂性 O(N)

for(int i = 0, j = 0; i < N; ++i; ++j) {
   if (i==j && i!=k) {
      /* do something */
   }
}

这也有复杂度 O(N)

最终,第 1 点和第 2 点具有相同的复杂性。

于 2014-07-15T12:17:29.297 回答