|
|
1
6
如果你对一本书中的某个特定主题感兴趣,你可以到书的后面,在索引中按字母顺序找到它。索引告诉您讨论主题的页码。然后直接跳到你感兴趣的页面。比读整本书快得多。 在数据库中也是一样的。索引意味着您可以跳转到联接行,而不是扫描表中的每一行以查找匹配项。 看看聚集索引是如何工作的( http://msdn.microsoft.com/en-us/library/ms177443.aspx ). 每桌你可以吃一个。 本文解释了非聚集索引是如何工作的( http://msdn.microsoft.com/en-us/library/ms177484.aspx ). 你想吃多少就吃多少。 这两篇文章都是关于Microsoft Sql Server的,但是索引背后的理论在所有关系数据库管理系统中都是一样的。 索引确实有相关的开销。每次对表执行插入/更新时,可能还必须更新受影响的索引。当然,索引占据了空间——但这对我们大多数人来说并不是一个真正的问题。因此,您需要平衡快速连接或筛选的性能优势与插入和更新的成本。 作为指南,您通常希望索引与join或where子句中包含的每一列匹配:
因此,Customer表中包含RegistrationDate和RegistrationCountry列的索引将加快此查询的速度。由于我们在查询中使用了“>”,这将是一个很好的聚集索引候选项(第一篇文章显示,聚集索引按索引顺序物理地排列数据,因此范围查询可以非常快速地隔离索引的范围)。
在这里,我们希望在Customer表上有一个包含CustomerID列的索引。我们希望订单表上有一个包含CustomerID和OrderType列的索引。然后连接的两边不需要进行表扫描。 通常情况下,从表中查询数据的方式很少,因此不会出现索引过载。很多索引有时是一种迹象,表明您的表具有混合的关注点,可以进行规范化。 |
|
|
2
1
你可能想了解一下数据库的基本知识 indexes . 索引基本上用于组织数据。 |
|
|
3
0
我发现有时候用两个更小的查询替换JOIN查询会更快,然后用PHP或任何调用MySQL的语言将它们连接起来。因此,尝试两种方法并对它们进行计时,看看哪种方法更适合特定情况,但请记住,随着数据库大小的增加,“最快”的解决方案可能会发生变化。 |