首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么和在哪里使用INDEXes -利弊

为什么和在哪里使用INDEXes -利弊
EN

Stack Overflow用户
提问于 2015-04-24 08:40:57
回答 4查看 22.4K关注 0票数 21

我对数据库编程非常陌生,我想知道索引的负面影响是什么?据我所知,索引加快了必须在数据库中搜索特定值(例如SELECT)的操作。

考虑一下这个例子:

对于表Example (在user_name列上有索引),操作:

代码语言:javascript
复制
SELECT TestField FROM Example WHERE user_name=XXXX

将更快地作为索引的结果。

我的问题是:使用索引的缺点是什么?如果一个指数只是给我们带来好处(业绩增长),为什么不设置为默认呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-24 08:55:59

好吧,您可能可以填写有关索引的书籍,但简而言之,在创建索引时,需要考虑一些问题:

虽然它(大多数情况下)加快了select,但是它减慢了插入、更新和删除,因为数据库引擎不需要只写数据,而且还要写索引。索引需要内存中硬盘上的空间(更重要的是)。无法在RAM中保存的索引是非常无用的。只有几个不同值的列上的索引不能加快选择速度,因为它不能排序很多行(例如,列“性别”,它通常只有两个不同的值-男性,女性)。

例如,如果使用MySQL,则可以检查引擎是否通过在select之前添加"explain“来检查是否对上面的示例EXPLAIN SELECT TestField FROM Example WHERE username=XXXX使用索引。

票数 47
EN

Stack Overflow用户

发布于 2015-04-24 08:58:47

什么是索引,它们在数据库中是什么?

如果没有列索引,user_name系统将不得不逐行扫描整个Example表,以查找所有匹配的条目。如果特定表中的数据分布表明只有几行左右,那么这显然是获取这些行的一种效率低下的方法。

但是,在使用索引时,您要将搜索功能重定向到不同的树结构,这种结构具有更快的查找速度和非常小的深度。

请记住,索引是纯冗余的。数据库索引就像电话簿--一个或任何其他索引--你可能愿意阅读(可能是其中的一部分,以快速找到您想要的内容)。

如果你对一本书的某一章感兴趣,索引会让你相对较快地找到它,这样你就不必浏览很多页才能找到它。

为什么不默认创建索引?

索引是一种数据结构,它在表的旁边创建,并在表被更改时维护自己。它的存在意味着数据存储的使用。

如果要索引大型表上的每一列,则保持索引所需的存储空间将远远超过表本身的大小。

索引结构的自我维护还意味着,每当发生UPDATE, INSERT, DELETE时,都必须更新索引(它是自动完成的,不需要您的操作),但是需要花费时间,这意味着这些操作执行得更慢。

有些情况下,您需要检索大部分表(例如,90%的行将在输出中),或者整个表,在这种情况下,对整个表的序列扫描(没有索引的行为)将比执行树遍历和叶节点链(这是导航索引树结构的行为)更有效。

票数 16
EN

Stack Overflow用户

发布于 2017-03-14 21:03:23

我们为什么不使用索引作为缺省值的主要原因是维护问题。也就是说,当我们通常更新(插入、删除或更新)表中索引的特定列时,必须动态更新索引,这是一个有点费时的过程。此外,维护此索引将成为一种开销。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29842622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档