用索引为什么能提高查询效率

zaqxsw3210 2008-05-21 12:49:51
比如说:一个100万的数据行,有a-z列,如果要在 a 列查找,
比如说查找等于**的,如果没有没有索引的话,是在a列查找等于**的
有索引的话,还是在a列查找等于**的。
有什么区别呢?
...全文
762 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hebo2005 2008-05-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 minquan2001 的回复:]
所有有索引不一定快
[/Quote]
正确的说法,基本上有索引都会比没索引快,至少90%以上吧
少数情况下可能会出现没索引快,这应该和索引不正常有关
minquan2001 2008-05-29
  • 打赏
  • 举报
回复
所有有索引不一定快
minquan2001 2008-05-29
  • 打赏
  • 举报
回复
如果执行对大表执行全表扫描,数据库才用一次把大表读入DATA BUFFER,这个速度有可能比在大表上加索引快,
索引不采用一次读入BUFFER,而是一次只读一个块,对小表加索引比较的快
adrianlynn 2008-05-25
  • 打赏
  • 举报
回复
索引有排序功能,并记录了物理地址,能进行范围搜索,有了索引的表增删改时由于建索引的关系会慢一些。
ilovemk 2008-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 superghost 的回复:]
跟字典差不多吧,有索引当然快了。但有时也可以不用索引的。
[/Quote]不一定的,假如表有10000条记录,你要查找的记录为9000条,那用索引肯定比牛车还慢。。。
Tony2251 2008-05-25
  • 打赏
  • 举报
回复
跟字典差不多吧,有索引当然快了。但有时也可以不用索引的。
lyp524 2008-05-25
  • 打赏
  • 举报
回复
字典不按从a-z的顺序排列的话,并且没有目录,你怎么找字?
hery2002 2008-05-25
  • 打赏
  • 举报
回复
瞧瞧这个,SQL版的,
索引的基本原理,以及数据是如何被访问的
http://topic.csdn.net/u/20080521/15/c5ee330e-596d-4957-8032-5bb9a80a9218.html
BrainStormLi 2008-05-25
  • 打赏
  • 举报
回复
何時需索引?
1、The column is used frequently in the where clause or join condition.
2、The column contains a wide range of values.
3、The column contains a large number of null values.
4、Two or more culumn are frequently used together in a where clause or join condition.
5、The table is large and most queries are expected to retrieve less than 2-4% of the rows.
何時不需索引?
1、The table is small.
2、The columns are not often used as a condition in the query.
3、Most queries are expected to retrieve more than 2-4% of the rows.
4、The table is updated frequently.
Note:若where條件包含is not null即使建立index依然會造成Full table scan。
smilegw 2008-05-24
  • 打赏
  • 举报
回复
正确的索引应该比没有索引查询快.就类似字典的目录,有了目录就很容易定位到要查的内容
ilovemk 2008-05-24
  • 打赏
  • 举报
回复
有索引也不一定快,要看你查找的数据量。
liuyann 2008-05-24
  • 打赏
  • 举报
回复

强烈建议先学习一下。
《数据库系统概论(第三版)》

==== ====

huoxudong125 2008-05-24
  • 打赏
  • 举报
回复
简单的说就是,相当于书的目录。
没有索引是没有书的目录,有了目录,你查找起来当然就快了!
Airroll 2008-05-21
  • 打赏
  • 举报
回复
这不是一俩句能说清楚的
有索引不一定快
全表扫描也不一顶慢

索引就是一个类似书的目录的作用
他里面储存着rowid,是一种用空间换时间的方法

我建议你看看oracle如何访问表中的数据

全表扫描
rowid
索引

应该是这三个
剩下的自己google之
chqchq 2008-05-21
  • 打赏
  • 举报
回复
如果没有索引,RDBMS就要顺序地、逐条地读取纪录并进行条件比较(全表扫描)。这个计算量就大了,而且需要大量的I/O操作,从而影响系统的戏能。
简单的说,如果将表看作一本书,索引的作用就类似于书中的目录。在没有目录的情况下,要在书中查找制定的内容(即查询条件),必须查阅全书;而有了目录之后,只需要通过目录就可以快速地找到包含所需内容的页。类似的,如果在表中插叙指定的纪录,在没有索引的情况下,必须遍历整个表,而有了索引之后,只需要先在索引中找到符合条件的索引列值,就可以通过保存在索引中的ROWID(相当于页码)快速找到表中对应的纪录。因此,为表建立索引,既能够减少查询操作的时间开销,又能产少I/O操作的开销。
目录和索引之所以能提高查询速度,是因为它们是按查询条件存储数据的,数据量少而且排列有序,便于采用数学方法进行快速定位。另外还提供了一个指向内容的指针,即书的页码或纪录的ROWID
本课程目前总计105课时,并且不定期的进行新知识点的补充,目的是打造一部围绕MySQL的全体系课程。课程涵盖11大章节,分别是:第1章基础&技巧:这部分的重点是会讲解一些容易被开发人员忽略的技巧,例如utf8mb4字符集问题、如何使用外部临时表提高查询效率、快速创建同结构表及快速复制数据、截断表和删除数据使用和差异、以及怎样使用help语句查看帮助文档。第2章六大数据类型:这部分的重点是对MySQL的8种数字类型、5种日期和时间类型、10种字符串类型、枚举类型、集合类型和时间戳类型的区别和使用进行深入讲解。第3章数据库函数大全:MySQL中有上百种函数之多,使用函数可以快速的解决我们很多开发问题,但是由于我们掌握的函数不够多,往往没有办法实际应用,本章节重点是让你掌握更多好用而你不知道的函数使用。第4章数据库引擎精讲:本章节带您深入到MySQL的体系架构,深入理解innoDB、MyISAM、MEMORY、ARCHIVE引擎的区别和使用原则。第5章数据库索引精讲:索引是保障我们查询效率的重点,本章节从逻辑存储和物理存储的底层入手,深入剖析索引的存储结构和查找方法,掌握聚簇索引、非聚簇索引、前缀索引等的存取原理和使用技巧。第6章调优工具:工欲善其事必先利其器,本章节带你掌握读写比例查询、缓存设置、执行计划和Profile调优工具。第7章参数调优和索引调优:怎么样让SQL执行的更快、数据库的性能更强,怎样充分利用索引进行不断的优化。本章节会为您讲解16种MySQL的优化策略。第8章SQL调优:SQL语句是我们日常使用的重点,怎么样写出一手高性能的SQL语句,其实是具有一定技巧的,本章节讲解8种优化策略,让数据SQL执行性能更强。第9章分库分表:在面对海量数据的时候单表和单个数据库的性能始终会存在瓶颈,本章节为您讲解分库分表的原理和技巧,怎么样使用Merge引擎分表、深入掌握MySQL数据库分区表的能力。第10章高可用架构和安全管理:本部分涵盖MySQL的高可用架构,主备架构、主从架构、主从从架构、互为主从架构。数据的同步复制、半同步复制、异步复制。主从复制原理和主从延迟的问题,以及在管理和开发层面怎样保证数据库安全。第11章MySQL日志:对MySQL的7种日志进行讲解,包括errorlog错误日志、general log查询日志、slow log慢日志、binlog 二进制日志、redlog重做日志。课程会附带配套文档和SQL脚本。有问题可以直接联系作者,24小时线上答疑。

17,377

社区成员

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

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