• SQL的别名和SQL的执行顺序和SQL优化


     SQL的别名

    1、不可以在where子句中使用列名的别名,即select name t from emp where t>2999;是不允许的

    2、使用别名的好处:

      提高SQL的易读性

      提高SQL的解析执行效率

      语法检查

      语义检查

      共享池检查

      生成执行树

      执行

     3、SQL的硬解析和软解析?

    SQL的执行顺序

    1、from语句--where语句--group by语句--having语句--select语句--order by语句

    rownum的使用

    select * from emp rownum<=2  /*查找emp表的前两条记录*/

    select * from (select rownum t,ename from emp) m

    where m.t>=5 and m.t<=10 /*查询某个范围的记录,先查询出rownum并保存为临时表m,再进行查询*/

    where和having的区别?

      where对分组前的小组内的详细信息进行过滤

      having对分组后的信息进行过滤

    内连接,外连接,自连接?

    SQL优化

    1、避免使用select * ,而是具体指出选择哪些列

    2、SQL大小写,数据库在解析sql时,先把SQL语句转换为大写,再进行解析操作,所以建议直接提供大写的SQL语句。

    3、过滤时,>和>=,使用>=优先,如a>2000和a>=2001,这样可以避免过滤2000和2001之间的小数,可以调高效率

    4、where子句中,不等于判断会使索引失效。

    5、where子句中,对列做运算,例如,加减乘除,会使索隐列失效。所以尽量不要在索隐列上做操作。

    6、模糊查询时,like "%abc%",前模糊会导致索引失效,后模糊不会导致索引失效。

    7、in和exists的区别?

      1、in适合内表小外表大的情况,select * from emp where emp.deptno in (select deptno from dept)

      2、exists适合外表小内表大的情况.如此运用可提升效率

      注:由于两者对表的连接方式不同,导致以上区分,in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

    8、not in 和 not exists 用法同上

    9、某些情况下可以使用exists替换distinct。

  • 相关阅读:
    Feign性能优化注意事项--超时
    Android MVP+Retrofit+dagger2+RxAndroid框架整合
    Android adb命令,linux中各种命令
    【视频音频】雷霄骅开源视音频项目汇总
    Android LitePal介绍与使用说明
    AndroidStudio第一次提交项目代码到git服务器/github
    Android框架之路——Fragmentation的使用(流式交互Demo)
    Android Studio 升级到3.0后出现编译错误.gradlecaches ransforms-1files-1.1*****-release.aar
    Android Studio你必须学会的快捷键(Eclipse转AS必看)
    Intellij IDEA常用配置详解
  • 原文地址:https://www.cnblogs.com/cindy-cindy/p/6798010.html
Copyright © 2020-2023  润新知