在项目开发的时候 特别是遇到数据库表中数据比较多的时候 SQL语句的执行效率优先级是非常高的,最近本人写了一条SQL 800万条数据中执行了10秒,最后定位出来是在使用 where lower(t.commit) = lower(#{userName})的时候执行效率特别慢 ;再次 后面会去专门分析 oracle中 自带函数的使用以及原理,这里就不做分析了,先来理解一下SQL的执行顺序 之前写SQL的时候拉住代码就乱写,也不管执行效率,自存经过了这件事情之后 才下定决心好好研究SQL性能方面的问题。
SQL select 执行顺序:
1.from 子句用来组装不同数据源的数据
2.where字句基于 指定的条件对记录进行筛选 (自右向左 所以 and条件一次能过滤多条记录的放在右侧)
3.group by字句将数据划分成多个组
4.使用聚合函数进行计算
5.使用having字句筛选分组
6.计算所有的表达式
7.select 查询字段(尽量不要用select *)
8.使用order by 对结果集进行排序(在from表有别名的时候 可能有的时候由于SQL执行的顺序问题 用到别名的时候可能会报错 后面会补充数据库别名的使用)
SQL语言不同于其他编程语言的最明显特征就是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL中,第一个被处理的字句是from,而不是第一个出现的select
注意:在使用别名的时候 可能有的条件会出错 这里和SQL执行的顺序有关系 后续会举例进行验证