`
xiebh
  • 浏览: 613040 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

选择索引:查询VS 修改性能

阅读更多
I/O是决定查询性能的主要因素。数据库设计者的挑战是构建物理数据模型来提供高效的数据访问。在数据库表中创建索引允许SQL Server降低I/O数来访问数据。在逻辑和物理模型阶段定义有用的索引是关键。SQL Server优化器严重依赖于索引键值的分布和索引密度来决定查询使用哪一个索引。SQL Server优化器能使用查询中的多个索引(通过索引交叉)降低I/O的数量来检索信息。若缺少索引,优化器执行表扫描,从IO角度来讲,它花费的代价更高。
尽管索引提供了一种快速访问数据的途径,但它们减缓了数据修改语句,因为当插入、修改和删除时,需要额外的负担来维护索引。

在决策支持系统中(DSS),定义更多的索引能帮助你的查询并且不会带来太多的性能问题,因为这些数据相对来讲是静态的并且不会频繁修改。你典型地会加载数据、创建索引。只要你需要索引来支持用户查询,并且它们能获得相当不错的响应时间,太多的索引的缺点只是不被使用的索引所浪费的空间。

另一方面,在OLTP环境下,太多的索引可能导致相当大的性能下降,特别是,假如一个表中索引数量超过4或5个。仔细想下,每个单行插入至少是一个数据页的写或者是为表中的每个索引所进行的更多索引页写(依赖于页分裂是否发生)。若有8个非聚集索引,单行插入最少将有9次写数据库,所以,对OLTP环境,你必须创建尽可能少的索引——典型地需要支持修改和删除操作的索引和你的关键查询,以及强制你唯一性约束的索引。

所以在理想世界中,自然的解决方法是,在DSS环境下创建许多索引,在OLTP环境下创建少许索引。不幸的是,在真实世界中,你典型地需要支持DSS和OLTP。你如何来解决两种环境下的对索引要求的竞争?为了满足DSS和OLTP应用的索引需求需要一些平衡技术。

其中一种方法是分别创建两个数据库——一个为DSS应用另外一个为OLTP。明显,这种方法需要一些方法来保持数据库的同步。这种方法选择依靠如何更新最新的DSS数据库。假如你更新的时间总是滞后的,你可以考虑使用dump-and-load机制,比如Log Shipping 或者周期性地数据库存储。如果你的DSS系统要求up-to-the -minute 并发,你可能会考虑使用replication技术。

另外一种选择是在日常工作中只为OLTP提供要求的索引。在忙的时间创建DSS查询和报表需要的索引。当DSS报表完成后,删除这些额外的报表。注意这种方法假定创建额外的索引需要的时间可以用加速DSS查询所获得时间得到补偿。

所以,小心选择索引以在数据搜索和数据修改性能之间提供一个平衡。应用的环境通常决定着索引的选择。例如,如果应用主要是OLTP类型,创建太多的索引可能会影响系统的性能。另一方面,应用可能是一个DSS类型的,在这种情况下,可以创建多一些的索引。
分享到:
评论

相关推荐

    深入解析MongoDB聚合与索引:提升数据库效能的关键策略

    MongoDB的索引机制是提升查询性能的关键。索引可以加快数据的查找速度,尤其是在处理大量数据时。MongoDB支持多种类型的索引,包括: 1. 单键索引:基于一个字段创建的索引,适用于单个字段的查询优化。 2. 复合...

    MySQL索引:提升数据检索速度的加速器

    1. **重建索引**:随着时间的推移,频繁的数据更改操作可能导致索引碎片化,定期重建索引有助于提高性能。 2. **删除不必要的索引**:过多的索引会导致写入操作变慢,因此需要定期评估索引的使用情况,并删除那些...

    数据库 创建索引 sql oracle

    数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面的知识点。 索引的概念和优点...

    MySQL索引类型大汇总

    MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的...索引是 MySQL 数据库性能优化的关键所在,合理的使用索引可以提高查询速度,提高数据库的高效运行。

    索引和视图的创建和修改

    - **非聚集索引(Nonclustered Index)**:不改变数据存储顺序,而是单独存储索引数据,通常用于提高查询性能。 - **聚集索引(Clustered Index)**:直接决定了表中数据的物理存储顺序,因此一个表只能有一个聚集...

    mysql的索引优化

    2. **索引优化**:合理选择索引类型和设计索引方案对于提高查询效率至关重要。例如,在经常被用作查询条件的列上创建索引可以显著提高查询速度。 3. **索引维护**:定期检查并优化索引结构也是必要的,以确保索引...

    建立合理的索引提高SQL Server的性能

    在SQL Server中,索引是提升数据库性能的关键因素,尤其是对于联机事务处理(OLTP)系统,快速的数据查询和处理速度至关重要。索引的工作原理是通过创建数据的额外结构,帮助数据库系统更快地定位和访问所需信息,...

    18.Oracle索引1

    Oracle数据库中的索引是提升查询性能的关键工具,它与书籍的目录类似,帮助快速定位到所需数据。在Oracle中,索引并非强制性,表可以没有索引,但索引的存在能够显著加快数据检索速度,尤其对于大数据量的表。 1. ...

    mssql索引优化工具

    - 提高并发性能:并发事务可以通过使用索引来减少锁的争用。 - 决策支持:对于数据仓库和分析系统,优化索引可以加快报表生成速度。 3. **索引优化工具功能** - 自动分析:工具会扫描数据库,识别哪些表和查询...

    MySQL数据库:使用NAVICAT工具创建和管理索引.pptx

    如果需要修改索引,比如更改索引类型或添加/删除索引列,可以先删除旧的索引,再按照上述方法创建新的索引。删除索引后,记得检查对表的影响,确保不会降低查询性能。 3. **删除索引**: 要删除不再需要的索引,...

    oracle索引的建立、修改、删除.doc

    Oracle 索引的建立、修改、删除 Oracle 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。在数据库设计阶段与数据库结构时就要考虑。应用系统的性能直接与索引的建立...

    SQL Server 索引结构及其使用(聚集索引与非聚集索引)

    | 频繁修改索引列 | 不应 | 应 | 在实践中,聚集索引和非聚集索引的使用规则很容易被忽视或不能根据实际情况进行综合分析。例如,主键就是聚集索引是一种误区。虽然 SQL SERVER 默认是在主键上建立聚集索引的,但这...

    MySQL进阶:优化查询性能与高可用性的实践

    - 选择合适的索引:索引可以显著提高查询速度,避免全表扫描。 - 减少返回的数据量:避免SELECT *,只选择必要的字段。 - 使用分页查询:使用LIMIT避免一次性加载大量数据。 - 利用缓存:缓存常用查询结果,减少...

    数据库索引概论及详解.docx

    - 对于那些在查询中经常作为条件的列,如主键或频繁用于连接操作的列,建立索引可以提升查询性能。 - 如果表中的数据更新较少,而查询频繁,索引的益处将大于其维护成本。 2. **不适合建立索引的情况**: - 小型...

    C# 集合的索引性能比较

    本篇文章将重点关注四个常见的集合类型:ArrayList、List、Hashtable和DataSet,并对它们的索引性能进行测试和对比。 首先,ArrayList是.NET Framework早期版本中的一个动态数组,它允许在运行时更改大小。虽然...

    利用SQL Server 2005索引视图提高数据库系统性能.pdf

    - 在查询优化器中使用索引视图:SQL Server的查询优化器会自动决定是否对给定的查询执行使用索引视图,这使得无需更改现有应用程序代码,即可实现性能提升。 - 使用N0EXPAND视图提示:该提示可以强制查询优化器将...

    oracle,数据库索引

    选择索引列时,应关注查询的WHERE和JOIN子句,并通过实验来评估索引对查询性能的影响。同时,注意避免在单个表上创建过多索引,以及避免索引定义的重叠。 常见的索引类型包括: 1. **唯一索引**:不允许重复值。 2....

    MySQL索引分析和优化.pdf

    #### 五、索引的选择与使用建议 - 在频繁作为查询条件的列上创建索引。 - 避免在经常更新的列上创建索引,因为每次更新都会导致索引的重建,增加开销。 - 对于复合查询,考虑创建多列索引以提高查询效率。 - 定期...

    SQL Server索引视图及性能提高简介

    SQL Server的索引视图是一种特殊类型的视图,它的出现主要为了提升数据库系统的性能,尤其在处理复杂的查询和数据聚合时。在SQL Server 2000中,引入了索引视图的概念,使得视图不仅可以作为数据的安全访问机制和...

    数据库技术与应用 索引-D习题与作业.doc

    3. 修改索引:可以更改索引的逻辑结构,如添加或删除索引列,或者改变索引的排序方式。 4. 删除索引:使用DROP INDEX语句移除不再需要的索引。 5. 重建索引:当索引碎片过多时,可以重建索引来优化性能。 6. 分析...

Global site tag (gtag.js) - Google Analytics