索引是什么,为什么添加查询索引索引后查询速度会快

为什么建立索引能加快查询速度,外键又有什么用_百度知道
为什么建立索引能加快查询速度,外键又有什么用
我有更好的答案
没必要用索引,如你上面说的表中数据很多的话,还是有索引好,下面找了一段索引的优缺点
采纳率:41%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。为什么索引能提高查询速度
[问题点数:40分,结帖人wxdp_1313113]
为什么索引能提高查询速度
[问题点数:40分,结帖人wxdp_1313113]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年 总版技术专家分年内排行榜第二
2009年 总版技术专家分年内排行榜第三
2018年2月 其他数据库开发大版内专家分月排行榜第二2018年1月 其他数据库开发大版内专家分月排行榜第二2017年12月 其他数据库开发大版内专家分月排行榜第二2017年11月 其他数据库开发大版内专家分月排行榜第二2017年1月 其他数据库开发大版内专家分月排行榜第二2014年8月 其他数据库开发大版内专家分月排行榜第二2014年2月 其他数据库开发大版内专家分月排行榜第二2014年1月 其他数据库开发大版内专家分月排行榜第二2013年12月 其他数据库开发大版内专家分月排行榜第二2013年10月 其他数据库开发大版内专家分月排行榜第二2013年8月 其他数据库开发大版内专家分月排行榜第二2013年5月 其他数据库开发大版内专家分月排行榜第二2013年1月 其他数据库开发大版内专家分月排行榜第二2012年8月 其他数据库开发大版内专家分月排行榜第二2012年5月 其他数据库开发大版内专家分月排行榜第二2012年4月 其他数据库开发大版内专家分月排行榜第二2012年1月 其他数据库开发大版内专家分月排行榜第二
2017年9月 其他数据库开发大版内专家分月排行榜第三2017年7月 其他数据库开发大版内专家分月排行榜第三2017年5月 其他数据库开发大版内专家分月排行榜第三2017年3月 其他数据库开发大版内专家分月排行榜第三2016年12月 其他数据库开发大版内专家分月排行榜第三2014年11月 其他数据库开发大版内专家分月排行榜第三2014年7月 其他数据库开发大版内专家分月排行榜第三2014年6月 其他数据库开发大版内专家分月排行榜第三2014年5月 其他数据库开发大版内专家分月排行榜第三2013年7月 其他数据库开发大版内专家分月排行榜第三2013年3月 其他数据库开发大版内专家分月排行榜第三2012年7月 其他数据库开发大版内专家分月排行榜第三2012年6月 其他数据库开发大版内专家分月排行榜第三2011年12月 其他数据库开发大版内专家分月排行榜第三
2016年1月 其他数据库开发大版内专家分月排行榜第二2014年12月 其他数据库开发大版内专家分月排行榜第二2014年11月 其他数据库开发大版内专家分月排行榜第二2014年5月 其他数据库开发大版内专家分月排行榜第二
2014年3月 其他数据库开发大版内专家分月排行榜第三
2014年11月 PHP大版内专家分月排行榜第三2014年6月 PHP大版内专家分月排行榜第三2014年4月 PHP大版内专家分月排行榜第三2014年2月 PHP大版内专家分月排行榜第三2013年11月 PHP大版内专家分月排行榜第三
2014年10月 Oracle大版内专家分月排行榜第二2014年9月 Oracle大版内专家分月排行榜第二2014年6月 Oracle大版内专家分月排行榜第二2014年4月 Oracle大版内专家分月排行榜第二2014年3月 Oracle大版内专家分月排行榜第二2014年2月 Oracle大版内专家分月排行榜第二2013年11月 Oracle大版内专家分月排行榜第二
2014年11月 Oracle大版内专家分月排行榜第三2014年8月 Oracle大版内专家分月排行榜第三
匿名用户不能发表回复!|Oracle数据库中如何利用索引表提高查询速度
在索引表的ROWID中存储的病不是记录的实际物理地址,而是逻辑的物理地址。故有些数据库管理员把索引表中的ROWID列称为ROWID伪主键列,他存放的是表的主键信息。
  一、索引表与标准表的差异
  索引表与标准表的差异主要体现在四个方面。
  一是索引表中的ROWID列存放的时主键信息,使逻辑的物理地址。而在标准表的ROWID伪列中则存储的是真实的物理地址。这是两者之间最本质的区别。另外其他三个方面的差异都是因为有这个差异存在而存在。也可以说,他是索引表优势的根源。
  二是索引表对记录的访问是基于主键的,也就是说,根据逻辑的ROWID.而标准表在访问记录的时候,则是通过物理的ROWID地址。
  三是表的扫描方式不同。若采用索引表的话,则数据库是通过全索引扫描方式反问相关的记录;而若采用标准表的话,则是通过顺序扫描的方式返回相关的记录。这两者访问方式在性能上有很大的差异。全索引扫描方式,可能提供更高的查询性能。
  四是对于主键的要求不同。在建立标准表的时候,不一定要指定主键。但是,若用户在建立索引表的时候,则必须给表建立主键,使用主键来唯一表示一行记录。很简单,在索引表中,ROWID伪列中就存储着主键信息。若不指定具体的主键的话,数据访问时就不能够对记录进行定位。
  不过,索引表与标准表的差异只是停留在数据库开发的层面,或者说,只是内部存储结构上有一定的差异。但是,在用户使用它们的时候,没有任何的差异。在前台应用程序设计的时候,用户可以向普通表那样访问索引表。这就给索引表的应用排除了使用上的障碍。
  二、索引表的优势
  索引表的优势主要体现在数据查询上。而且,这个优势是非常明显的。
  一是索引表能够获得比标准表更快的查询速度,即使这张标准表已经建立了合适的索引。这跟索引表的存储结构是分不开的。因为索引表的数据在存储的时候,所有的行记录都是跟排序过的主键列一起存储在数据库系统中。故在查询的时候,只需要找到主键,就俄可以记录查询到整条记录的信息。而标准表在数据查询的时候,需要先找到对应的ROWID列,然后再去查询主键信息,再去查询对应的记录。所以,索引表减少了数据查询过程中的中间环节,避免了额外的数据块读取操作。
  二是索引表中的记录,是按照主键列进行排序存储的。对于主键列范围内的查询,用户可以获得更快的查询速度。这主要是因为在表格的ROWID伪列中,直接存储了主键信息。
  三是利用溢出存储功能,提高常用列的访问速度。在后台数据库表中,可能有几十个字段。但是,前台用户在查询的时候,往往不需要访问所有的字段。那些用户经常要访问的列,就叫做常用列。对常用列与不常用列区别明显的,可以通过溢出存储功能,提高常用列的访问速度。即将表中不经常需要访问的非主键列不存储在B树的叶子节点中,而是存储在一个具有堆组织方式的溢出存储区中。若索引表比较大,使用溢出存储不但可以减少索引表所占用的存储空间,而且可以提高常用列的查询效率。当然,这只是针对常用列而言。若用户查询非常用列时,溢出存储就没有效果了。
  三、索引表的使用时机
  1、 通过关键字查询表的内容。
  如果在实际应用中,大部分是通过主键列来查询其他列的信息的时候,就可以考虑把这张表建立为索引表。
  如在ERP系统中,有销售订单表、采购订单表等等。对于这些表单,用户查询的时候,大部分是按照订单单号来进行查询。此时,数据库管理员在设计的时候,就可以把这些单据的基础表格设置为索引表。
  特别是有些系统把单据分为单头档与单身档。如采购订单单头与采购订单单身。在前台显示为两个不同的页签,在后台对应两张不同的数据表。利用单头页签来调用单身的内容。此时,就是通过一个采购订单单头的ID列来查询单身的内容。在这种设计的时候,完全可以把订单单身对应的数据库表设置为“索引表”。从而提高数据查询的速度。
  2、 若表变化频繁,则不适宜使用索引表。
  若表的变更比较频繁的话,则采用索引表不怎么合适。这主要是因为Oracle数据库在对索引表管理时,开销比较大。如对于员工考勤系统中,员工信息这个表变更不是很频繁,但是,青年人网提示员工考勤信息表中的数据,则每个小时都可能会发生变化。
  对于变换这么频繁的表格,建立索引表就不怎么合适。此时,我们需要为其建立基本表,然后在基本表上建立索引。这虽然查询效果没有索引表那么好,但是,却可以大大减少Oracle数据库的开销。所谓,有得必有失。数据库管理员有时候还必须在这个得失之间寻求一个平衡。以期数据库整体性能的最优化。
  3、 灵活利用溢出存储功能。
  普通B树索引条目一般比较小,因为在每个索引条目中仅保存索引列的值与ROWID的值。但是,因为索引表中的每个索引条目都包有整条地记录,所以,索引表中的索引条目就可能会很大。为此,用户若在索引表中查询数据,其查询的只是其中一部分字段内容的话,索引表的效果就体现不出来。相反,若表中的字段比较多的话,则效果会适得其反。为此,在Oracle数据库中,采用了溢出存储功能来应对索引表的这个缺陷。
  如在一张员工基本信息表中,他有员工姓名、员工编号、员工出身年月、身份证号码、住址、户口、民族等信息,长达几十个字段。但是,在平时的时候,我们基本上只需要查询员工的姓名、编号、身份证号码即可。而不需要其他的信息。
  此时,当员工比较多的时候,就需要把这张表转换成索引表,然后采用溢出管理功能,来提高员工信息常用字段的查询速度。把用户经常需要用到的员工姓名、编号、身份证号码等字段保存在叶子节点上。而把其他不常用的字段采取“溢出存储”策略。
  四、索引表的建立与使用
  在介绍索引表与基本表的差异时,笔者已经说过,两者的差异主要体现在存储结构上。故对于用户使用是没有多大影响的。
  在索引表的建立上,可以参考相关的书籍。笔者在这里只是要强调,在索引表建立过程中的几个关键点。
  一是在索引表中,不能对非主键建立索引,。这是索引表建立的一个限制条件,数据库管理人员必须无条件的遵守。二是必须给索引表建立主键。有些数据库管理员有个习惯,在建立表的时候,一开始不设置主键。等到表维护的时候,再确定某个字段作为主键。但是,在索引表建立的时候,一开始就要指定表的主键,否则的话,会有错误产生。这也是数据库管理人员需要注意的。
创建索引不是为了在sql语句中用的,而是可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。没有更多推荐了,
不良信息举报
举报内容:
数据库添加索引为什么能加快查询速度
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!为什么能够提高查询速度?
索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。 举个例子:表中有一百万条数据,需要在其中寻找一条特定id的数据。如果顺序查找,平均需要查找50万条数据。而用二分法,至多不超过20次就能找到。二者的效率差了2.5万倍!
在一个或者一些字段需要频繁用作查询条件,并且表数据较多的时候,创建索引会明显提高查询速度,因为可由全表扫描改成索引扫描。
(无索引时全表扫描也就是要逐条扫描全部记录,直到找完符合条件的,索引扫描可以直接定位)
不管数据表有无索引,首先在SGA的中查找所需要的数据,如果中没有需要的数据时,服务器进程才去读磁盘。1、无索引,直接去读表数据存放的磁盘块,读到中再查找需要的数据。2、有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中。
索引有什么副作用吗?
(1)索引是有大量数据的时候才建立的,没有大量数据反而会浪费时间,因为索引是使用二叉树建立.
(2)当一个系统查询比较频繁,而新建,修改等操作比较少时,可以创建索引,这样查询的速度会比以前快很多,同时也带来弊端,就是新建或修改等操作时,比没有索引或没有建立覆盖索引时的要慢。
(3)索引并不是越多越好,太多索引会占用很多的索引表空间,甚至比存储一条记录更多。对于需要频繁新增记录的表,最好不要创建索引,没有索引的表,执行insert、append都很快,有了索引以后,会多一个维护索引的操作,一些大表可能导致insert 速度非常慢。
阅读(...) 评论()

我要回帖

更多关于 solr更新索引速度太慢 的文章

 

随机推荐