20170623_oracle_优化与体系结构

一般优化技巧

  建议不用"*"代替所有列名

  删除所有数据用TRUNCATE代替DELETE

  用NOT EXISTS 代替NOT IN

  用EXISTS代替IN

  用EXISTS代替DISTINCT

表连接方法

  驱动表的选择

  WHERE子句的连接顺序

    表连接关系放在前面

    过滤越多的条件子句应放置到后面

索引

  索引分类

    B树索引

    语法:CREATE [UNIQUE]INDEX index_name ON tablename (column_list)

       [TABLESPACE tablespace_name];

 

     其他索引:

      唯一索引

      反向键索引

      位图索引

      组合索引

      函数索引

    索引原则: 

      创建索引原则:

        频繁索引的列

        经常排序、分组的列

        经常连接的列

        指定单独的表空间

      不适合建立索引原则

        数据量小

        仅包含几个不同值的列

        数据表操作特别频繁、业务性能要求高

    管理索引

      索引使用原则:

          表中导入数据后再创建索引。否则每次表中插入数据时必须更新索引。

        在适当的表和字段上创建索引。如果经常检索的数据少于表中的15%则需要创建索引。

        限制表中索引的数目。索引越多,在修改表时对索引做出修改的工作量越大。

      索引常见错误用法:

        LIKE

        函数

        运算

表分区

  把表中数据划分称若干部分,并存储在不同的位置

  优点:

    改善查询性能

    表更容易管理

    便于备份和恢复

    提高数据安全性

  表分区分类

    范围分区:

      列值的范围作为划分条件

    散列分区:

      列的hash值自动分配

    列表分区:

      列值必须明确指定

      一个分区列

    复合分区:

      先按第一分区方法分区

      再按第二分区方法划分子分区

    其他分区

小结:

  一般SQL优化有哪些手段?

   建议不用"*"代替所有列名

  删除所有数据用TRUNCATE代替DELETE

  用NOT EXISTS 代替NOT IN

  用EXISTS代替IN

  用EXISTS代替DISTINCT

  索引起到什么作用?索引有哪些分类?

  逻辑分类:

    单列或组合索引

    唯一或非唯一索引

    基于函数索引

  物理分类:

    分区或非分区索引

    B树索引

    正常或反向键索引

    位图索引

  表分区使用情况?表分区有哪些分类?

    表分区:

      把表中数据划分称若干部分,并存储再不同的位置

    优点:

      改善查询性能

      表更容易管理

      便于备份和恢复

      提高数据安全性

     表分区分类:

      范围分区:

        列值的范围作为划分条件

      散列分区:

        列的hash值自动分配

      列表分区:

        列值必须明确指定

        一个分区列

      复合分区:

        先按第一分区方法分区

        再按第二分区方法划分子分区

      其他分区:

原文地址:https://www.cnblogs.com/xtdxs/p/7080783.html