SQL查询中存在与存在差异的分析

SQL查询中存在与存在差异的分析
从某个ID中选择*(从b中选择id);

选择*从一个存在(从B那里张=数据选择1);

对于上述两种情况,在遍历内存时,存在查询数据库的需要,因此当B表中的数据量较大时,存在的效率要优于。

1,从一个ID中选择*(从b中选择id);

在()中只执行一次,它检测B表中的所有id字段和缓存,然后检查表的id是否等于B表中的id,如果相等,则将一个表的记录添加到结果集,直到一个表的所有记录被遍历为止。
它的查询过程类似于下面的过程:

复制代码代码如下所示:
表结果集= { };
数组a(从a中选择*);
数组B =(从b中选择id);

为(int i = 0;i < a.length;i++){
为(j = 0;J < b.length;j++){
如果(一个{ = . })
(一resultset.add {我});
打破;
}
}
}
返回结果集;
正如您所看到的,当B表的数据较大时,它(b)不适合使用,因为它遍历了所有B表数据。
例如:一张表有10000条记录,而B表有1000000条记录,那么最有可能遍历10000×1000000次,效率很差。
再次:A表有10000条记录,B表有100条记录,然后最有可能遍历10000×100次,遍历次数大大减少,效率大大提高。

结论:(b)适合于B表,数据比表小。

2、选择*从一个存在(从B那里张=数据选择1);

存在()执行a.length倍,它不存在高速缓存()的结果集,因为内容的存在()的结果集是不重要的,这个查询语句的结果为空或空是很重要的,然后它返回false,然后返回到真实的时候是不是空的。
它的查询过程类似于下面的过程:

复制代码代码如下所示:
表结果集= { };
数组a(从a中选择*);

为(int i = 0;i < a.length;i++){
如果(存在(一个{我},ID)从B { / /选择1张记录返回数据=
(一resultset.add {我});
}
}
返回结果集;
当B表比表数据大时,它适合使用存在(),因为它没有太多遍历操作,只需要一个查询。
例如:一个表有10000条记录,B表有1000000条记录,然后存在()将执行10000次以确定表中的id是否等于B表中的id。
例如,有10000的记录在表100000000中的记录表,所以存在()执行10000次,因为它只执行a.length倍。B表中的数据越多,越适合存在()。
另一个例子:一个表有10000条记录,B表有100条记录,然后(存在)进行10000次,以及在使用(中)10000×100次遍历,遍历内存中是因为(),和(存在)需要查询数据库,我们都知道更多的消费数据库查询性能高,而记忆是比较快的。

结论:存在()是B表大于表的情况。

当表数据与B表数据一样大时,内部数据几乎与现有表一样有效,可以作为选项使用。
在插入记录之前,必须检查记录是否已经存在。只有当记录不存在时,才能执行插入操作。我们可以避免插入重复记录利用存在的条件
插入一个(姓名,年龄)选择姓名,年龄B从哪里不。

存在和存在的效率问题通常比内效率更高,因为在不遵循指数的情况下,但要看到实际使用的实际情况:在适合大的外观和小的内部表中,存在适合小外形和大的内部表。

对存在:

的存在是用来检查是否有子查询至少会返回一行数据,而查询实际上并不返回任何数据,而是返回一个值,true或false。
存在指定一个查询来检测一行的存在。
语法:存在子查询
参数:子查询是一个受限制的选择语句(不允许有一个compute子句和关键词)。
结果类型:布尔返回true,如果查询包含的行,否则返回假。
结论:选择*从一个存在(从B那里张=数据选择1)
的返回值存在(包括不存在)的条款是一个布尔值的存在,有一个查询语句(选择…从……,我称之为存在的内部查询。内部查询语句返回一个结果集。存在子句根据结果集返回一个布尔值,或者根据内部查询结果的非空返回一个布尔值。
一个流行的理解是,每行外部查询表都被发送到内部查询作为测试。如果内部查询的结果被返回到非空值,则存在子句返回true,它可以用作外部查询的结果行,否则不能作为结果使用。
分析器首先要看句子的第一个单词。当它发现第一个词是select关键字时,它会跳转到从关键字,然后通过关键字从表关键字中找到表名,然后将表加载到内存中。如果找不到,则返回select以查找字段解析。如果您找到了哪里,然后分析条件,然后返回到选择分析字段。
后面的关键字后面是一个条件表达式。当条件表达式完成时,返回值,不是0或0,不是0是true(true),0是false(false)。后面的条件也有返回值,true或false,以确定下一次不执行选择。
解析器找到关键词选择,然后跳到从关键词学生表到内存中,并指向第一个记录,然后找到这个关键字计算条件表达式,如果为真,然后把记录到一个虚表指针,然后点下一个记录。如果FALSE然后指针指向下一个记录没有任何其他操作。检索完整的表并返回检索虚拟表的user.exists是一个条件表达式的一部分,它也有一个返回值(true或false)。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部