一.Sql语句的优化
不要用 not in
不要用 *
不要用 <> !=
1.SELECT子句中避免使用*号
2.尽量多使用COMMIT
3.用WHERE子句替换HAVING子句
4.多使用内部函数提高SQL效率
5.使用表的别名
6.使用列的别名
7. 避免where 1=1写法
8.JOIN字段建议建立索引
9.避免频繁创建和删除临时表,以减少系统表资源的消耗
10.in 和 not in 也要慎用,否则会导致全表扫描
11.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
二.索引
当我们给表添加主键的时候,数据库会默认给主键添加索引
索引相当于书的目录
oracle中的
rowid
是一种数据类型,它使用基于64为编码的18个字符来唯一标识一条记录物理位置的一个ID,类似于Java中一个对象的哈希码,都是为了唯一标识对应对象的物理位置,需要注意的是ROWID虽然可以在表中进行查询,但是其值并未存储在表中,所以不支持增删改操作
我们还可以手动的给某一列添加索引
注意:索引需要维护,并不是越多越好
如果一张表的索引太多,数据库会忙于维护索引,从而降低数据库性能
索引维护: 每新增一条记录,删除一条记录,索引都会有改变.索引中的值都会重新生成.
例如一个表有100个索引,那么数据库需要重新生成100个索引
一般情况下,一个表有一到两个索引就可以了.
常见的就是二叉树索引
常见索引
1.二叉树索引
B树:有序数组+平衡多叉树;
注意:这里的平衡是绝对平衡,即保证所有的叶子节点都在树的同一层,如新增的数据不能保证绝对平衡,则对树进行重构。
根据如上的模拟,为了保证树的绝对平衡,叶子节点都在同一层,添加数据的时候都会按照规则进行调整.
B+树:有序数组链表+平衡多叉树;(加强版多路平衡查找树,效率更高)
在B+Tree的每个叶子节点增加一个指向相邻叶子节点的指针,就形成了带有顺序访问指针的B+Tree。做这个优化的目的是为了提高区间访问的性能,例如图4中如果要查询key为从18到49的所有数据记录,当找到18后,只需顺着节点和指针顺序遍历就可以一次性访问到所有数据节点,极大提到了区间查询效率。
2.反向键索引
3.位图索引
总结: 第一次分享博客,有点小激动,希望这些对大家有帮助,喜欢的帮忙点个赞来鼓励一下小白吧.大神请绕道,哪里写的不对请指教哦 (向大佬低头 DLyyds!!!).