• SQL优化——select


    MYSQL优化实施方案:https://www.cnblogs.com/clsn/p/8214048.html

    1. 对查询时经常用到的字段建立索引,如包含多个也可以构建复合索引,建立索引之后需要注意的一点是,查询时要确保和设计字段的格式是一致,如

      SELECT * FROM TABLE WHERE USER_ID = 12345
      

      这里USER_ID的类型是NUMBER,而实际设计表时如果USER_ID的类型是VARCHAR时,这里索引就会用不到,从而造成全表扫描。如发现查询时间过长,可以用

      explain SELECT * FROM TABLE WHERE USER_ID = 12345
      

      来查看明细

    2. 当表过大时,可以将老数据,历史数据进行归档(前提这些数据以后不用),减少数据量!!

    3. 经常用到的查询,或者较为复杂的查询时(多个表的联合查询)可以创建视图。

      视图的优缺点:

      优点:

      • [ ] 视图提供表的抽象。可以轻松地在视图中添加/删除字段,而无需修改基础架构。
      • [ ] 视图可以很容易地建模复杂的连接。。
      • [ ] 视图可以对你隐藏特定于数据库的内容。例如,如果需要使用Oracles sys进行一些检查_上下文函数或许多其他东西
      • [ ] 可以轻松地在视图上直接管理你的授权,而不是实际的表。如果知道某个用户可能只访问某个视图,则更容易管理。
      • [ ] 视图可以帮助你实现向后兼容性。可以更改基础架构,但视图可以向某个客户端隐藏这些事实。(比较常见的应用就是校园数据库中,学生表中存有班级、学分、学费、杂费等数据,然而对于老师的办公室中的应用来说,不该让他们看到学费、杂费之类的会计方面的数据,那么就不给他们此表的访问权限,而单独给他们一个河蟹过的视图,)

      缺点:

      • [ ] 将丢失有关关系的信息(主键、外键)
      • [ ] 不清楚是否能够插入/更新视图,因为视图对你隐藏了它的底层联接
    4. 尽量不要有空判断的语句,空判断会导致全表扫描,对于空判断这种情况,可以考虑对这个列创建数据库默认值。

    5. 尽量不用不等于条件,这样容易导致全表扫描,尽量使用范围查询。

    6. 尽量使用exists代替In,或者用外连接代替in

    7. 尽量不用or条件,会导致全表扫描,可以分开查询然后union all

    8. 分库分表。如果是HIVE还可以分桶,HIVE的分区中,每个分区以文件夹的形式单独存放在表文件夹的目录下,桶则是文件形式

    9. 左模糊查询尽量不要使用,会引起全表扫描

    10. 理论上尽量多使用多表查询(left),少使用子查询

    11. WHERE子句中的连接顺序.:
      ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

    12. 优化group by,提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。

    13. 加上并行化参数

    14. 应该还有很多其他方法,暂时想不起来

  • 相关阅读:
    android自己定义控件系列教程----视图
    Android怎样监听蓝牙耳机的按键事件
    Putty SSH简单使用
    Linux配置无线网卡驱动实现无线上网
    Oracle在中文环境下出现乱码解决办法
    百度云盘破解限速|个人值得拥有
    Ubuntu安装出现左上角光标一直闪解决方式
    ubuntu-16.4TLS安装QQ
    2015毕业找工作纪实|一年的蜕变毕业生
    安装rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
  • 原文地址:https://www.cnblogs.com/vitasoy/p/11873051.html
Copyright © 2020-2023  润新知