SQL中的条件算法选择查询

时间:2014-07-15 12:04:06

标签: mysql sql algorithm where-clause select-query

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

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

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

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

  2. 其他方式我可以使用where ID = <id> and name = <name> and so on...

  3. 进行选择查询

    所以现在我的偏好是第二选择,因为复杂性较低。

    现在继续前进只会在我脑海中产生冲突。

    问题:

    查询这两个查询相互比较的复杂性(将ID视为主键):

    1. where Id = <id>

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

    3. 我知道这总取决于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; } }

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

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

2 个答案:

答案 0 :(得分:1)

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

这里的问题是RDBM如何处理然后解析它以实现更好的性能。您不必担心这一点,您唯一需要担心的是您的数据库是否设计得恰当。

这就是使用where Id = <id>where ID = <id> and name = <name> and so on...

之间的区别

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

答案 1 :(得分: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点具有相同的复杂性。