`
xiebh
  • 浏览: 606016 次
  • 性别: 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类型的,在这种情况下,可以创建多一些的索引。
分享到:
评论

相关推荐

    Elasticsearch索引和查询性能调优.pdf

    卡/SATA接口SSD盘)通常比机械硬盘(SATA盘/SAS盘)查询速度快5~10倍,写入性能提升不明显。 对于文档检索类查询性能要求较高的场景,建议考虑 SSD 作为存储,同时按照 1:10 的比例配置内存和 硬盘。对于日志分析类...

    通过使用索引提高SQL SERVER的性能.pdf

    "通过使用索引提高SQL SERVER的性能" ...在创建索引的时候,你要考虑一些时间、空间和性能的因素,如创建索引要花时间,每个创建的索引边同原先的数据表都需要空间来存储数据,每次修改数据时索引都需要更新等。

    XML数据索引技术

    对XML数据建立有效的索引,是左右XML数据处理性能的重要因素.深入地讨论了目前XML索引 技术的研究现状,将XML索引技术分为两大类:节点记录类索引(本身还可以分为3个小的类型)和结构摘要类 索引.根据XML数据查询...

    Mongodb亿级数据量的性能测试

    使用的是SafeMode.True开关),这个测的是安全插入性能会差多少4)查询一个索引后的数字列,返回10条记录(也就是10KB)的性能,这个测的是索引查询的性能5)查询两个索引后的数字列,返回10条记录(每条记录只

    MySQL-数据库-索引详解

    索引是提高数据库性能的重要方式。 索引的概念 ---------------- 索引是表中数据的目录。如果使用索引,则扫描索引文件,根据索引项,找到元祖的地址,然后再根据地址找到数据。由于索引文件很小,而且索引有顺序...

    SQLServer2008查询性能优化 2/2

    内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且...

    SQL查询安全性及性能优化

    说明:网络经验:后者效率高于前者,但是以上两个查询语句的性能通过查询计划可以看出其实是一样的,后者不比前者性能好。可能是SQLServer的后期版本进行了优化。 示例二: 网络经验:网络经验:三个效率是不...

    SQLServer2008查询性能优化 1/2

    内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计以及数据库管理等,贯穿了数据库系统知识的各个方面。最后以一个实际的工作负载将所有技巧联系起来,并且...

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

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

    高性能MySQL(第3版).part2

    5.3.2前缀索引和索引选择性153 5.3.3多列索引157 5.3.4选择合适的索引列顺序159 5.3.5聚簇索引162 5.3.6覆盖索引171 5.3.7使用索引扫描来做排序175 5.3.8压缩(前缀压缩)索引177 5.3.9冗余和重复索引178 ...

    Android开发环境中的SQLite性能优化.pdf

    使用索引可以提高 SQLite 的查询性能,因为 SQLite 可以快速定位到一组值,而不用扫遍全表。 使用事务和索引是 SQLite 性能优化的两个重要方法。通过使用事务和索引,我们可以提高 SQLite 的性能和资源占用,从而...

    浅析索引在SQL语句中的使用技巧.pdf

    "浅析索引在SQL语句中的使用技巧" 索引是数据库性能优化中最常用的技术手段。它可以快速找到表数据,不需要对整张...通过选择合适的索引类型和建立索引,可以提高数据库的访问性能,提高查询速度,并减少系统的开销。

    Mysql如何适当的添加索引介绍

    添加索引是为了提高数据库查询性能,索引是最物美价廉的东西了,不用加内存,不用改程序,不用调sql,只要执行个正确的create index ,查询的速度就可能提高百倍千倍,这可是有诱惑力的,可是天下没有没费的午餐,...

    浅析SQL SERVER数据库的性能优化.pdf

    创建合适的索引可以大幅提高查询性能。常见的索引类型包括聚簇索引、非聚簇索引、组合索引和 XML 索引等。 2. 查询优化:查询优化是指对查询语句进行调整和优化,以提高查询效率。常见的查询优化技术包括重新编写...

    SQL中查询语句的优化方法.pdf

    SQL 查询语句优化方法 SQL 中查询语句的优化是指...通过对查询语句的修改和调整,可以提高查询效率,提高系统性能,降低资源占用,提高用户体验。本文详细介绍了查询语句优化的方法和技术,为读者提供了实用的参考。

    看懂SqlServer查询计划

    了解SqlServer查询计划 在Sql Server优化中,了解查询计划是非常重要的。...不过,增加索引后,也会影响数据表的修改动作,因为修改数据表时,要更新相应字段的索引。所以索引过多,也会影响性能。

    索引优化原则及Oracle中索引总结

    Oracle索引建立原则  · 确定针对该表的操作是大量的查询操作还是大量的增删改操作。  · 尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引...修改复合索引将消耗更长

    sql性能优化

     a 修改前台程序 把查询条件的供应商名称一栏由原来的文本输入改为下拉列表 用户模糊输入供应商名称时 直接在前台就帮忙定位到具体的供应商 这样在调用后台程序时 这列就可以直接用等于来关联了  b 直接修改后台 ...

    kinto-elasticsearch:通过ElasticSearch索引和查询Kinto记录

    Kinto ElasticSearch kinto-elasticsearch将记录转发到ElasticSearch,并提供一个/search端点来查询索引数据。安装pip install kinto-elasticsearch设置在设置中: kinto.includes = kinto_elasticsearchkinto....

Global site tag (gtag.js) - Google Analytics