zoukankan      html  css  js  c++  java
  • sql优化初级

    目标:逼近数据库理论上的瓶颈

    1、写明具体查询某几列,减少*的使用,表明过长时候,尽量使用表的别名

    2、在业务密集型的sql中尽量不采用IN操作符,用EXISTS方案代替

      in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

      in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。

    3、模糊查询like,尽量少用%

      关键词%yue%,由于yue前面用了“%”,因此查询必然走全表扫描,除非必要,否在不要在关键词加%

    4、二者都使用使用where(与having比较)

      where先过滤,(数据就少了)在分组

    5、尽量使用多表连接(join)查询(避免子查询)

      子查询效率特别低,而一般的子查询都可以由关连查询来实现相同的功能,关联查询的效率要提高很多,所以建议在数据查询时避免使用子查询(尤其是在记录很多时),而最好用关联查询来实现。

    6、建立索引

      较频繁的作为查询条件的字段,唯一性不太差的字段建立索引,更新不太频繁的字段适合创建索引,不会出现在where条件正的字段不该建立索引

    7、多实用内部函数提高sql效率

      例如多用concat连接,代替“||”的符合连接

    8、应尽量避免在where字句中使用!=或者<>,in 或 not in

      最好不要给数据库刘null,尽可能的使用not null 填充数据库,(不然会进行全盘扫描,影响效率)

    9、尽可能的使用varchar/nvachar 代替 char/nchar (节省字段存储空间)

  • 相关阅读:
    iOS开发-UIColor和UIImage之间的转换
    iOS开发-给用户好的印象
    iOS开发之国际化(本地化)
    git学习之创建分支和合并分支
    iOS设置StatusBar字体颜色问题
    iOS开发技巧,细节(二)
    iOS开发,[NSBundle mainBundle] pathForResource方法返回空的问题解决
    【MM MRP】PA-SCM525 Unit2 Lot-Size$Rounding Profile(MRP_2)
    【MM MRP】PA-I (MRP_1)
    【MM 发票】MM MIRO界面中的ITEM LIST的布局可自己定义(转)
  • 原文地址:https://www.cnblogs.com/jiangweili/p/9440920.html
Copyright © 2011-2022 走看看