同事用这2个小技巧,让SQL语句效率提升了1000倍
副问题[/!--empirenews.page--]
本次来讲授与 SQL 查询有关的两个小常识点,把握这些常识点,可以或许让你停止踩坑以及进步查询服从。 1. 应承字段的值为 null,每每会激发劫难 起首,先筹备点数据,后头好演示
index(id) 暗示给 id 这个字段建设索引,而且 id 和 name 都应承为 null。 接着插入4条数据,个中最后一条数据的 id 为。
此时表中的数据为 这时我们查询表中 id != 1 的动物有哪些
功效如下: 此时我们只找到了两行数据,按原理应该是三行的,可是 id = null 的这一行居然没有被匹配到,,也许各人传闻过,null 与任何其他值都不相称,按原理 null != 1 是创立的话,然而实际很残忍,它就是不会被匹配到。 以是,武断不应承字段的值为 null,不然也许会呈现与预期不切合的功效。 横竖我之前有踩过这个坑,不知道各人踩过木有? 可是万一有人配置了应承为 null 值怎么办?假如然的这样的话,对付 != 的查找,后头可以多加一个 or id is null 的子句(留意,是 is null,不是 = null,由于 id = null 也不会匹配到值为 null 的行)。即:
功效如下: 2. 尽也许用 union 来取代 or (1)、适才我们给 id 这个字段成立了索引,假如我们来举办等值操纵的话,一样平常会走索引操纵,不信你看:
功效如下: 通过执行打算可以望见,id 上的等值查找可以或许走索引查询(预计在你的料想之中),个中
(2)、那 id is null 会走索引吗?答是会的,如图
个中
(3)、那么题目来了,那假如我们要找出 id = 1 可能 id = null 的动物,我们也许会用 or 语句来毗连,即
那么这条语句会走索引吗? 有没有走索引,看执行打算就知道了,如图
个中:
通过执行打算可以看出,行使 or 是很有也许不走索引的,这将会大大低落查询的速度,以是一样平常不提议行使 or 子句来毗连前提。 那么该怎样办理? 着实可以用 union 来代替 or,即如下:
此时就会别离走两次索引,找出全部 id = 1 和 全部 id = null 的行,然后再用一个姑且表来存放最终的功效,最后再扫描姑且表。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |