SQL优化,索引

  1. 尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替,在选择IN或EXIST操作时,要根据表容量大小来具体考虑
  2. 尽量使用NOT EXISTS或者外连接替代NOT IN操作符。因为NOT IN 不能应用表的索引。
  3. 尽量不用<>或者 !=操作符。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描
  4. 在设置表时,把索引列设置为 NOT NULL.判断字符是否为空一般是不会应用索引的,因为B树索引是不索引空值的。
  5. 尽量不用通配符%或者_作为查询字符串的第一个字符。因为这两个中的某一个作为查询字符串的第一个字符时,索引不会被使用
  6. where子句中避免在索引列上使用计算。如果索引不是基于函数,那么当在where子句中对索引列使用函数时,索引将不起作用,所以where子句中避免在索引列上使用计算。
  7. 用>=代替>。
  8. where后面的条件顺序要求。where后面的条件,表连接语句写在最前面,可以过滤掉最大数量记录的条件居后。
  9. 使用表的别名,并将之作为每列的前缀。当在SQL语句中连接多个表时,使用表的别名,并将之作为每列的前缀,这样可以减少解析时间。
  10. 进行了显式或者隐式的运算的字段不能进行索引。
  11. 用 UNION ALL代替 UNION. UNION是最常用的集操作,使多个记录级联成为单个集,对返回的数据行也有唯一性要求,所以Oracle就需要进行SORT UNIQUE操作,如果结果集又比较大,则操作会比较慢;UNION ALL操作不排除重复行,所以会快很多,如果数据本身重复行存在可能性较小时,用UNION ALL会比用UNION效率高很多

索引

select * from user_indexes 查询现有的索引
select * from user_ind_columns 查询索引建立在那些字段上。

索引是:一种用于提升查询效率的数据库对象,通过快速定位数据的方法,减少磁盘I/O操作,索引信息与表独立存放,Oracle数据库自动使用维护和维护索引。
索引分为 唯一性索引,非唯一性索引。

创建索引原则:
在select操作占大部分的表上创建索引。
在where子句中出现最频繁的列上创建索引。
在选择性高的列上创建索引,

创建索引 create index 索引名 on 表名(字段名)

删除索引drop index 索引名

发布了195 篇原创文章 · 获赞 55 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_42470710/article/details/104097535