`
ganjp
  • 浏览: 71910 次
  • 性别: Icon_minigender_1
  • 来自: 其实还可以
社区版块
存档分类
最新评论

why索引

阅读更多

为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点, 但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。

第一,创建索引和维护索引要耗费时间,这种时间随着数据 量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列 上创建索引,例如:

在经常需要搜索的列上,可以加快搜索的速度;
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度;
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
在经常需要排序的列上创 建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。


同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:

第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
第二,对于那 些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索

分享到:
评论

相关推荐

    MySQL高频面试题和答案

    我们还是用Why?What?How?三步法来看这个问题。 为什么会需要索引?索引是什么?索引怎么用的? 再思考为什么需要B+树?B+树是什么?B+树怎么用? 答:大部分程序主要的功能都是对数据的处理,写入、查询、转化、...

    信息安全_数据安全_us-18-Mulasmajic-Peterson-Why-So-Spurious.pdf

    - **段选择器和RPL**:段选择器索引到GDT中的某个段描述符,并且其两个最低位定义了请求者权限级别(RPL)。 - **FS/GS段寄存器**:在x64架构中,FS和GS段寄存器有特别的用途。它们可以被操作系统设置任意基址以...

    Cassandra write performance test (Why cassandra's write is so slow)

    4. **数据模型和索引**:不恰当的数据模型设计或者过度使用索引也可能导致写入性能下降。Cassandra的列族设计和查询模式需要优化,避免全表扫描和过多的索引。 5. ** tombstone issue**:Cassandra使用tombstones来...

    QuickAssist:Visual Studio和Notepad ++加载项可帮助快速搜索和打开大型代码库中的文件。 它基于自定义的便携式索引编制。 它也支持文件切换和外壳上下文菜单

    它也支持文件切换和外壳上下文菜单屏幕截图载入记事本++ 在2012年加载 #Why Quick Assist#为什么在使用非常大的代码库时很难快速导航到文件和功能。 即使我们使用Visual Studio作为编辑器,我们也依赖make文件,...

    Using Redis As a Time Series Database: Why and How

    - **索引**: 使用合适的数据结构以提高查询效率。 ## Redis 作为数据存储 Redis 不仅可以用作缓存,还可以作为一个高性能的时间序列数据库。其丰富的数据类型使得它能够胜任许多高级任务。 ### 主要特点 - **高速...

    chapter25 实践习题1

    Discuss the differences between using an R-tree and a B-tree index for handling these queries, and why one might be more suitable than the other. 在处理区域查询(圆形区域)的地理数据库中,R树和B树...

    Solr.In.Action目录整理版

    本书可能会教授读者如何创建索引,如何向索引中添加数据(索引文档),如何对索引进行维护和优化等。Solr使用了类似于数据库的概念,通过schema来定义索引的结构,书中可能还会介绍如何根据需求定制schema,实现对...

    Myeclipse禁用updating indexes

    #### 二、Why Disable Updating Indexes? 1. **提高启动速度**:禁用此功能可以显著加快MyEclipse的启动速度,尤其是对于配置较低的计算机。 2. **减少网络流量消耗**:频繁地从远程仓库下载索引文件会消耗较多的...

    thewhy-server:Why Com。 后端服务器

    5. **搜索与索引**:为了快速响应查询,服务器可能需要实现高效的搜索功能。这可能涉及建立全文搜索引擎,如Elasticsearch,或者利用数据库内置的搜索功能。 6. **安全性**:服务器需要处理安全问题,如防止SQL注入...

    数据库MySQL基础知识点5

    创建索引的语法是`CREATE INDEX 索引名称 ON 表名(字段(长度));`。如果字段是字符串类型,应指定长度,这通常与字段定义时的长度保持一致。例如,创建名为`idx_1`的索引,针对`goods`表的`name`字段,可以使用`...

    Learning joint intensity-depth sparse representations中文翻译

    索引词 1.引言 2.为什么现有的模型不够? 3.灰度-深度生成模型 4.关联基追踪 5. 灰度-深度字典学习 7.关于先前的技术 8.实验结果 A. 模型恢复 B. 灰度-深度字典学习 9.结论 英文部分: Abstract Index Terms 1....

    mongodb官网文档集合

    文档中的“Troubleshooting the PHP Driver”和“Why are my data files so large?”等内容,为遇到常见问题的用户提供了解决方案,涵盖从简单的错误排查到复杂的性能问题分析,确保用户能够有效地诊断并解决在使用...

    答辩PPT (432).pptxPPT模板

    **研究动机 (Why do this?)** 这一部分解释了为何选择该主题进行研究。可能的原因包括现有工作的局限性、新方法的优势,以及实施该研究的实际应用价值。例如,研究可能指出,通过提出新的算法,可以提高计算效率,...

    Learning Joint Intensity-Depth Sparse Representations全文中文翻译

    索引词 1.引言 2.为什么现有的模型不够? 3.灰度-深度生成模型 4.关联基追踪 5. 灰度-深度字典学习 7.关于先前的技术 7.实验结果 A. 模型恢复 B. 灰度-深度字典学习 8.结论 附录 A. 定理一的证明 感谢 英文原文: ...

    Oracle SQL最佳实践

    ##### 1.1 为什么(Why)需要优化 - **系统慢的表现**:系统响应时间增加,用户体验下降。 - **原因复杂**:性能下降的原因可能是多方面的,并非简单地表现为“慢”。 ##### 1.2 优化什么(What) - **系统层面**...

    Oracle ocp 052题库

    这部分可能会讨论如何创建和维护索引。 ### 38. 角色 (Roles) 角色是一组权限的集合,可以方便地分配给用户。这部分可能会讲解如何创建和管理角色。 ### 39. 动态性能视图和数据字典视图 (Dynamic Performance ...

    solr in action

    - **实时索引**:支持实时文档更新,确保索引内容始终是最新的。 - **高级排序和分组**:提供多种排序方式和分组策略,方便用户根据需求组织搜索结果。 - **地理空间检索**:支持地理位置相关的查询,适用于地图应用...

    Data-Intensive Text Processing with MapReduce

    **(Why Is This Different?) MapReduce与其他数据处理框架的不同之处在于其设计目标是为了处理海量数据,并且能够很好地适应分布式环境。它解决了传统数据库系统在处理大数据时的性能瓶颈,使得大规模数据挖掘和...

Global site tag (gtag.js) - Google Analytics