Oracle语句、Top-N思想、索引

一、Oracle查询语句:待补充...

1、Oracle中的【Top-N思想,需借助ROWNUM来实现】(查询最...的几条数据信息):

-- ROWNUM:

-- 1、ROWNUM只能用于<=  2、并且=的时候,只能查询出第一条(最高/低的那条),默认ROWNUM=1 3、ROWNUM 用于>=时将报错
-- 【案例】:查询工资最高的前三个人的信息  ROWNUM->伪列  DESC->降序(从大到小)
select rownum,E.*
from (select * from emp order by sal desc) E
where rownum <= 3
-- 【案例】:查询工资最低的前三个人的信息  DESC->升序(从小到大)
select rownum,E.*
from (select * from emp order by sal asc) E
where rownum <= 3
-- 【升级版  查询student表第三到第六行的数据信息】
select 
from (select rownum NO, id, name from student where rownum <= 6)
where NO >= 3
-- ----------------------------------------------------------------
-- ROWID:

-- 1、ROWID也是一种伪列 2、ROWID记录该条数据在硬盘上存在于哪个空间、磁道、栅区 3、可以获得数据的修改权,就可以打开表的锁,修改内部数据。
select rowid, e.*
from emp e

二、视图:一种虚表

三、索引--------数据库优化查询效率的思想:

1、一般的应用系统,读操作的比例远大于写操作的比例。在插入更新操作上很少出现性能问题,而实际最容易出问题的往往是一些复杂的查询操作,因此对查询效率的优化显得尤为重要,所以数据库往往引入索引。

一、常见的查询算法:

1、顺序查找:
    
    a、对数据库中存在的数据进行顺序查找,全表进行遍历。
    b、数据结构:有序或无序队列
    c、时间复杂度:O(n)

2、二分查找:(每次分两部分,判断在左半边还是右半边。类似在一本书中找第29页的找法)

    a、每次只要判断在哪一半数据中,不断进行二分法,直到找到结果。
    b、数据结构:有序数组
    c、时间复杂度:O(logn)

3、二叉排序树:

    特点:1、若它的左子树不为空,则左子树上所有节点的值均小于它的根结点的值
          2、若它的右子树不为空,则右子树上所有节点的值均大于它的根结点的值
          3、它的左右子树也分别为二叉排序树
    原理:1、若b是空树,则搜索失败,否则:
          2、若x等于b的根节点的数据域之值,则查找成功;否则:
          3、若x小于b的根节点的数据域之值,则搜索左子树;否则:
          4、搜索右子树。
    
    a、数据结构:二叉排序树
    b、时间复杂度:O(log2N)

4、哈希散列法(哈希表):

    a、根据键值对和hash函数创建一个hash散列表(hash表),然后根据键值对,通过散列函数,定位数据元素位置
    b、数据结构:哈希表
    c、时间复杂度:几乎是O(1)

5、分块查找:选取每一块中的最大关键字构成索引表。先判断数据在哪个索引表,再在这一块中进行顺序查找。每次搜索都会使得搜索范围缩小一半。
    

2、索引的目的在于提高查询效率,与我们查阅书籍所用的目录是一样的道理:先定位到章,再到小节,再到某一页。例如:查字典等情景。本质就是:通过不断地缩小要获取数据的范围,直到筛选出自己查询的结果。从而将随机的事件变为有序的事件,索引机制可以用同一种查找方式更快地锁定一条数据。

索引:

    1、定义:索引是存储引擎用于快速查找记录的一种数据结构,是独立于数据库的对象,
             在MySQL中叫“键”。

    2、优点:当数据库中数据量很大的时候,索引对于查询效率的影响非常明显。添
             加索引是提高查询性能最有效的手段。

    3、缺点:当数据的写操作量同样很大时,会影响写的效率。因为每次写操作之后,
             数据库得再次构建原数据与新增数据的之间的索引。

-- 【构建索引方法1】-->【Oracle会自动为 主键 与 唯一键 创建索引】
-- 为ename创建唯一约束,Oracle会自动为其创建索引
alter table emp 
    add constraints ename_UNI unique (ename);

-- 【构建索引方法2】-->【手动创建索引,为其他除主键以外的查询频率较高的字段设置索引】
-- 为ename手动创建索引
create index ename_INDEX on emp (ename);

四、树-----索引的实质:

平衡树(非二叉树、B树、B+树):

    1、主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的,有些数据库也有使用
        哈希桶作为索引的数据结构

    2、【聚集索引】:我们平时建表的时候就会为表加上【主键或者唯一约束】等。事实上,
        没有主键的表中的数据是无序的一行一行整齐的排列在磁盘存储器上。而一个加了主
        键的表,存储结构就变成了树状结构,也就是平衡树,换句话说,整个表就变成了索引,
        也叫“聚集索引”。因此一个表只允许有一个主键【主键索引】,其作用就是将表的格式
        转化为索引【平衡树】格式。

    3、【非聚集索引】:自己手动创建的常规索引。为查询频率较高的字段设置索引

create index index_birthday on user_info(birthday);

    4、【覆盖索引】:双字段覆盖索引。查询数据时,叶子结点除了有user_name表的主键id
       以外,user_name字段也在里边,因此不需要主键id的查找数据行的真实存在,直接取
        得user_name字段的值返回即可,进一步提高查询性能。

create index index_birthday_and_user_name on user_info(birthday, user_name);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值