学生表 Student
id(编号) | name(名字) | age(年龄) | height(身高) |
1 | Tommy | 26 | 170 |
2 | Jerry | 23 | 180 |
3 | Frank | 30 | 160 |
如表所示,这里只是呈现了3条数据,我们这里假设有1万条数据,
查询年龄25岁以上,身高170以上的全部学生
Select * from Student where age > 25 and height > 170;//正常情况下可以这么写,
假设1:年龄在25岁以上的有8000个学生,而身高170以上的只有10个学生,
上述的SQL的执行顺序和查询的行数应该是:
1.先查询年龄25岁以上的学生,结果有8000条记录,
2.再查询身高170以上的学生,就得在8000条结果里再次判断,最坏的可以遍历8000次左右,这效率较低
假如更改上述SQL语句where条件字段的顺序,如下:
Select * from Student where height > 170 and age > 25;
那么结果将是:
1.首先是查询出身高170以上的学生,结果只有10个;
2.然后再在这10个结果中查询出年龄大于25岁的学生,这样遍历的次数一下子就减少了很多很多
总结:所以,千万不要以为where语句中字段的顺序可以随便乱写,应该结合具体情况来安排好顺序,以使效率更高,
当然,如果想效率进一步提高,应该在这两个字段上建立索引 (题外: 索引的建立以及 什么条件下索引才会被调用)