了解索引和视图本质的请进!

holsten32 2009-04-22 10:34:13
如果你觉得你很了解索引和视图了,那么就来一起探讨下吧!
1.索引的本质是什么?发生索引的时候内部是怎样查找数据的?
2.具体说明什么情况下适合建立索引,什么情况下不适合?
3.索引的优点和缺点

4.为什么要建立视图?
5.建立视图的优点和缺点?最好举例说说,大家一起谈论!光说概念性的没有意义!


我想这些看似简单的问题其实值得大家一起探讨!
...全文
131 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主应该给点分,这样估计回答这个问题的人就多了

索引:如果查询只返回少于4%的行,就需要使用索引,打个比方

select * from test_table where test_id = 2303;

假如给定test_id返回的行比例少于4%,那么就应该在test_id上实现索引
对不同的oracle版本,建索引规则是不一样的,对于8i到10g,4%基本就可以了,11g没用过,估计应该<4%吧
还有就是索引不是建了就一定会使用,有很多原因可以导致索引不会被使用,比如说你建的是B树索引在test_id列,那么下边的

select * from test_table where TO_CHAR(test_id) = '2303';

就不会使用索引,一般函数如trunc,substr,to_date,to_char,instr等只要是能改变列的值,都会忽略掉索引,除非你建了基于该函数的索引.
superhsj 2009-04-23
  • 打赏
  • 举报
回复
如果把一本书比作一个数据表的话,每一页是一条记录,页号是主键,那么索引就是书的目录。我们要看某一章节的使用,往往通过目录很快的找到。
目录记录的越详细,我们通过它找记录的速度当然就越快,但是如果一个索引过于复杂,我们又要花大量的时间去找索引。试想如果一本书有100页,他前面的目录记录的非常详细,但是目录确有50页,我们要通过索引的话,就必须在50页的目录里先找到想要的信息,这样一来,我们通过索引反而没有提高查询的速度。

至于视图,主要是为了简化查询吧,如果有些东西比较常用,而查询语句却过于繁琐,我们就可以通过视图来处理。缺点吗,应该就是视图也要占用一定的资源,降低整体的性能了吧。所以对视图来说没有应不应该建立,只有值不值得建立
holsten32 2009-04-22
  • 打赏
  • 举报
回复
自己顶了.我也说说我的理解!
建立索引就是为了便于select查询,但是索引是牺牲了执行时间而换取查询时间的!所以说找到建立索引的平衡点很关键,不过这个平衡点怎么找就有艺术了,具体艺术在哪里希望高手指教!
speedin 2009-04-22
  • 打赏
  • 举报
回复
其实这些都是很基础也很难得东西的东西,基础的是概念,难得是在系统中如何建索引和视图,特别是索引,虽然索引能提高数据库读的能力,但是也会占用一定得资源,并且降低写的效率。具体怎么建,该建多少,那是数据库设计的问题了,主要看数据库的冗余度。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧