我正在处理要求我比较Row的每一列的任务。有很多方法可以实现,我很好奇,因为行数是一个很大的数字。所以我在这里通过例子解释它。
---------------------------------------------------------------------
ID[P_K] | Name | Address | City | Gender | College
---------------------------------------------------------------------
以上是一个表的基本示例,它是来自多个学院的学生的数据,现在我从外部源获取一些数据,需要将其与我的数据库中的数据进行比较。以下是可行的方法。
我将使用where Id = <id>
选择查询,并在我的代码中逐一匹配。
其他方式我可以使用where ID = <id> and name = <name> and so on...
所以现在我的偏好是第二选择,因为复杂性较低。
现在继续前进只会在我脑海中产生冲突。
问题:
查询这两个查询相互比较的复杂性(将ID视为主键):
where Id = <id>
where ID = <id> and name = <name> and so on...
我知道这总取决于MySQL算法,我搜索过很多没有找到MySql的Select算法。
如果有人可以共享Select算法,将会很有帮助。
特定于算法:
此算法可以使用两种方式:
For number of rows {
if(whereCondition1 && whereCondition2 .... && whereCondition<N>)}
}
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],复杂性将降低。正确?
那么从哪个算法是用户?或不是这些?
答案 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点具有相同的复杂性。