我正在维护一个相当大的应用程序和数据库,并注意到我们的一些存储过程中的一些糟糕的数据库性能.
我总是听说"添加索引"可以帮助提高性能.我当然不是DBA,我不明白索引是什么,为什么它们有帮助,以及如何创建它们.
我基本上需要索引101.
任何人都可以给我资源,以便我可以学习吗?
根据经验,索引应该在您在连接或where子句中使用的任何字段上(如果它们有足够的不同值来使用有价值的索引,只有少数可能值的字段不会从索引中获益为什么尝试索引一个字段是没有意义的.
如果你的结构已经正式创建了主键(我应该创建一个没有主键的表),那么根据定义索引是因为主键需要有一个唯一的索引.人们经常忘记他们必须索引外键,因为在设置外键关系时不会自动创建索引.由于外键的目的是为您提供一个连接字段,因此大多数外键应该被编入索引.
创建的索引需要维护.如果您有大量的数据更改活动,它们可能会碎片化,性能降低,需要刷新.在线阅读有关索引的书籍.您还可以在那里找到create index语句的语法.
索引是一种平衡行为,您添加的每个索引通常都会增加数据插入,更新和删除的时间,但可以加速复杂插入,更新和删除中的选择和连接.虽然上面的经验法则是一个很好的起点,但没有一个公式可以确定哪些是最佳指数.
想象一下类似于库中卡片目录的索引.索引使您无需搜索书籍的每个岛屿或书架.相反,您可能能够从常用字段中找到所需的项目,例如ID和名称等.构建索引时,数据库基本上会创建一个与查询可能匹配的内容,而不是扫描整个表.您可以通过允许搜索较小的数据子集或优化的数据集来加速查询.
索引是数据库系统用于快速查找数据的方法.现实世界的比喻是书中的索引.如果作者/出版商在索引他们的书方面做得很好,那么读者很容易通过查看索引直接转到他们想要阅读的页面.数据库也是如此.如果在字段上创建索引,则数据库会对数据进行预排序.当对数据发出请求时,数据库使用索引来识别数据存储在硬盘上的位置,并直接进入那里.如果没有索引,则数据库需要查看每条记录,以确定它是否符合查询的条件.
查看索引的一种简单方法是考虑一副牌.未编入索引的数据库就像是已经洗牌的卡片.如果你想找到黑桃王,你需要逐一查看每张卡片才能找到它.你可能很幸运,它可能是第一个,或者你可能是不幸的,它可能是最后一个.
一个被编入索引的数据库,所有卡片都从王牌到王牌订购,每个套件都放在自己的堆里.寻找黑桃王现在要简单得多,因为你只需要查看包含黑桃的一堆牌的底部.
我希望这有帮助.但要注意的是,虽然索引在关系数据库系统中是必需的,但如果编写太多索引,它们可能会产生效果.网上有很多很棒的文章,你可以阅读索引.在你深入了解之前,我建议做一些阅读.
索引基本上对给定列上的数据进行排序,然后存储该顺序,因此当您想要查找项目时,数据库可以通过使用二进制搜索(或其他一些优化的搜索方式)进行优化,而不是查看每个单独的行.
因此,如果您搜索的数据量很大,则绝对需要添加一些索引.
大多数数据库都有一个工具来解释你的查询将如何工作(对于db2,它的db2expln,可能与sqlserver类似),以及一个建议索引和其他优化的工具(db2的db2advis,对于sqlserver来说也许类似).