索引在mysql性能中的作用

索引在mysql性能中的作用,mysql,join,Mysql,Join,为什么为mysql表定义索引可以提高具有join的查询的性能?您可能需要阅读数据库的基础知识。索引基本上是用来组织数据的。我发现,有时用两个较小的查询替换连接查询,然后用PHP或任何调用MySQL的语言将它们连接起来,速度会快得多。因此,请尝试这两种方法并计时,看看哪种方法更适合特定情况,但请记住,最快的解决方案可能会随着数据库大小的增加而改变。如果您对某本书中的特定主题感兴趣,请转到书的后面,并在索引中按字母顺序找到它。索引告诉您讨论主题的页码。然后你直接跳到你感兴趣的页面。比读整本书快得多

为什么为mysql表定义索引可以提高具有join的查询的性能?

您可能需要阅读数据库的基础知识。索引基本上是用来组织数据的。

我发现,有时用两个较小的查询替换连接查询,然后用PHP或任何调用MySQL的语言将它们连接起来,速度会快得多。因此,请尝试这两种方法并计时,看看哪种方法更适合特定情况,但请记住,最快的解决方案可能会随着数据库大小的增加而改变。

如果您对某本书中的特定主题感兴趣,请转到书的后面,并在索引中按字母顺序找到它。索引告诉您讨论主题的页码。然后你直接跳到你感兴趣的页面。比读整本书快得多

在数据库中也是一样的。索引意味着您可以跳转到连接行,而不是扫描表中的每一行以查找匹配项

看看聚集索引是如何工作的。每张桌子都可以有一个

本文解释了非聚集索引的工作原理。你想要多少就有多少

这两篇文章都是关于MicrosoftSQLServer的,但是索引背后的理论在所有关系数据库管理系统中都是相同的

索引确实有相关的成本。每次对表执行插入/更新时,受影响的索引可能也必须更新。当然索引会占用空间,但对我们大多数人来说,这并不是一个真正的问题。因此,您需要平衡更快的连接或过滤带来的性能优势与插入和更新的成本

作为指导,您通常希望索引与join或where子句中包含的每个列相匹配:

SELECT 
    * 
FROM 
    Customer 
WHERE 
    RegistrationDate > @registrationDate 
    AND RegistrationCountry = @registrationCountry;
因此,Customer表上包含RegistrationDate和RegistrationCountry列的索引将加速此查询。由于我们在查询中使用了>,这将是一个很好的聚集索引候选项。第一篇文章显示,聚集索引以索引顺序物理地排列数据,因此范围查询可以非常快速地隔离索引范围

SELECT 
    * 
FROM 
    Customer c
    INNER JOIN Order o
        ON o.CustomerID = c.CustomerID
        AND o.OrderType = @orderType
在这里,我们希望在Customer表上有一个包含CustomerID列的索引。我们需要一个包含CustomerID和OrderType列的Order表索引。然后连接的两侧将不需要进行表扫描

通常,从表中查询数据的方式很少,因此不会出现索引过载。很多索引有时表明您的表有混合关注点,可以进行规范化