SQL—In-Exists-Any

sql—in-exists-any。假设a in(not in,exists,not exists )b in:只要a中的值在b中存在则返回truenot in:只要a中的值在b中不存在则返回trueexists:只要a中的值在b中存在则返回truenot exists:只要a中的值在b中不存在则返回trueany:三种情况 a > any b:a中的值只要大于b中的最小值则返回truea < any b:a中的值只要小于b中的最大值则返回true

a = any b:a中的值只要等于b中的任何值则返回true 从表面上看,in和exists的效果几乎一模一样,不过之前看过一些资料上说,in和exists使用的算法不同,in用的是hash,exists用的是btree;具体区别看链接 我在网上还看到过一种说法是:in会全表扫描,exists遇到第一个就直接返回。由于以当前的知识体系还不足以深挖,但我个人对这种说法持怀疑态度,这种说法的来与也可能与in和exists所使用的的算法有关,因为in先是对子表进行hash,而hash有个特点就是在查找的时候需要挨个比对,这可能就是全表扫描说法的来源,实际上并不是全表扫描,扫描的次数决定于hash表的规模和所谓的运气,因为hash的存储是随机的;而exists用的是树数据结构,那么在查找的时候就是分层查找。

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐