SQL优化

1.一般优化的技巧

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

  a2.删除所有数据用TRUNCATE代替DELETE

  a3.用NOT EXISTS 代替 NOT IN

  a4.用 EXISTS 代替 IN

  a5.用EXISTS 代替DISTINCT

2.表连接的优化

     表连接关系放在前面,过滤记录越多的条件子句应放置到后面

3.索引的使用

   a1.索引分类

      b1.逻辑分类:单列或组合索引

                             唯一或非唯一索引

                             基于函数索引

      b2.物理分类

                            分区或非分区索引

                             B树索引

                             正常或反向键索引

                             位图索引

    a2.B树索

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

[ TABLESPACE tablespace_name]

SQL优化

a3.唯一索引 : 适用在值唯一的字段如:身份证号,主键列自动加唯一索引

 例:CREATE UNIQUE INDEX UQ_deptname  on dept(deptname)  --在部门表的部门名称上建唯一索引

a4.位图索引 : 适用在大量相同值,DML不频繁的列加。职务,工作类别,性别等 

例:CREATE BITMAP INDEX BIT_job  on emp(job)  --在员工表的职务列上建位置索引

a5.反向键索引 : 适用于值连续的列上,类似序列的值的列

例:CREATE INDEX RE_salaryLevel on Level(salary) reverse

a6.组合索引 : 经常 作为组合条件的多个列

例:CREATE INDEX  INDEX_STU_SEX  ON STUDENT(STUNAME,SEX) 

a7.函数索引 : 适用在经常适用函数的列上

索引原则

a1.频繁搜索的列

a2.经常排序,分组的列

a3.经常连接的列

a4.指定单独的表空间

不适合建立索引的原则

 a1.表数据小

 a2.仅包含几个不同值的列(如:性别)

 a3.增删改数据表操作特别频繁

 a4.增删改性能要求高于查询

4.管理索引

 a1.表中导入数据后再创建索引,否则每次有中插入数据时都必须更新索引

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

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