【问题标题】:In general, how do you index something in database queries? How do you know what to index? [closed]一般来说,您如何在数据库查询中索引某些内容?你怎么知道索引什么? [关闭]
【发布时间】:2014-04-07 16:55:27
【问题描述】:

谁能指导我获得一个易于理解的解释(不需要我阅读 300 页的大部头)关于如何索引事物以及如何识别要索引的内容、规范化事物的意义等?或者提供非常简单的例子?

【问题讨论】:

  • 如果你认为 300 页是一本大部头,那你就迷路了。我写了一个book on that topic,我认为它对于理解索引来说是尽可能短的。它仍然有大约 200 页。您可以在use-the-index-luke.com 免费阅读

标签: sql database indexing


【解决方案1】:

这仅限于 SQL Server

  1. 对于每个“严肃”的数据表,必须有一个精心挑选的聚簇索引。 良好的聚类索引是窄的、唯一的、静态的(从不改变)并且理想情况下会不断增加 - INT IDENTITY 尽可能接近完美

  2. 对于任何属于外键的列,创建一个非聚集索引。这有助于 JOIN 和其他操作,是公认的最佳实践

  3. 不要过度索引! - 索引过多可能比没有更糟糕!

  4. 让您的系统运行一段时间,观察它的执行情况,找出潜在的性能瓶颈

  5. 如果您发现了一些性能问题,请生成一个有代表性的工作负载(不仅仅是单个查询;通过使用服务器端跟踪)并尝试通过使用例如数据调优顾问(但不要盲目采纳 DTA 所说的一切!)

  6. 一次实施一个索引 - 再次观察您的系统 - 性能(实际或感知的)是否有所改善?如果是:保留索引 - 如果不是:再次删除它

究竟要使用哪些索引 - 这有点像一种基于大量专业知识、实验和经验的黑色艺术 - 你真的不能在这里给出清晰的、非黑即白的想法。尝试一些东西——观察它的好处(或负面影响)——从中学习。重复直到你退休:-)

真的没有 10 页的清单,一旦你知道了,你就完成了。多年来,您要么自己学习这些东西 - 要么聘请具有该专业知识的人 - 你的选择。没有“简单的方法”可以在 5 个简单的课程中掌握有关索引的所有内容.....

【讨论】:

  • 我的问题是我什至不知道如何开始学习这些。我不确定我应该用什么样的数据来“实验”,用什么来练习等等。
  • @user3219632:嗯 - 你目前系统有性能问题吗?从一个真实的、实际的例子中学习总是最好的。否则:阅读,阅读,阅读!那里有很多不错的博客——或者如果可以的话,参加 SQL 性能调优技术课程来学习基础知识
【解决方案2】:

如果您是从零开始,Paul Litwin 的《关系数据库设计基础》值得一读。 (22 页书...)http://sbuweb.tcu.edu/bjones/20263/Access/AC101_FundamentalsDB_Design.pdf

正如他所说,数据库设计与其说是科学,不如说是艺术,因此示例只能帮助您改进自己的系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2017-02-10
    • 2012-12-09
    • 1970-01-01
    • 2011-11-05
    • 2011-03-26
    • 2012-05-22
    相关资源
    最近更新 更多