Mysql 索引和联接

Mysql 索引和联接,mysql,join,indexing,Mysql,Join,Indexing,我知道索引是如何为表工作的 但是我想知道我是否在CustomerID列上触发了下面的join语句和索引,在这种情况下,索引扮演任何角色如果是的话,那么如何或者有其他方法来创建索引 SELECT o.OrderID , o.CustomerID , c.CustomerName , o.OrderDate FROM Orders o JOIN Customers c ON o.CustomerID = c.CustomerID order

我知道索引是如何为表工作的

但是我想知道我是否在CustomerID列上触发了下面的join语句和索引,在这种情况下,索引扮演任何角色如果是的话,那么如何或者有其他方法来创建索引

SELECT o.OrderID
     , o.CustomerID
     , c.CustomerName
     , o.OrderDate
  FROM Orders o 
  JOIN Customers c
    ON o.CustomerID = c.CustomerID 
 order 
    by o.CustomerID; 
桌子就像

订单表:

    +----------------------+------------+------------+
    | OrderID              | CustomerID | OrderDate  |
    +----------------------+------------+------------| 
    | 10308                | 2          |1996-09-18  |
    | 10309                | 37         |1996-09-19  |
    | 10310                | 77         |1996-09-20  |
    +----------------------+------------+------------+
CustomerID  CustomerName                        ContactName    Country    
         1  Alfreds Futterkiste                 Maria Anders   Germany    
         2  Ana Trujillo Emparedados y helados  Ana Trujillo   Mexico    
         3  Antonio Moreno Taquería             Antonio Moreno Mexico
客户表:

    +----------------------+------------+------------+
    | OrderID              | CustomerID | OrderDate  |
    +----------------------+------------+------------| 
    | 10308                | 2          |1996-09-18  |
    | 10309                | 37         |1996-09-19  |
    | 10310                | 77         |1996-09-20  |
    +----------------------+------------+------------+
CustomerID  CustomerName                        ContactName    Country    
         1  Alfreds Futterkiste                 Maria Anders   Germany    
         2  Ana Trujillo Emparedados y helados  Ana Trujillo   Mexico    
         3  Antonio Moreno Taquería             Antonio Moreno Mexico

加入
表时,优化器首先决定从哪个表开始。在您的特定示例中,没有
WHERE
,但有
ORDER BY
。因此,优化器可能会决定从表的排序开始。这可能会避免一个排序

假设它以
Orders
开头,以避免排序,则在
Orders
上需要此选项:

INDEX(CustomerID)
INDEX(CustomerID)
因此,
JOIN
中的第二个表是
Customers
。在查看
订单
后,若要接触
客户
,您必须查看订单上的
。CustomerID=Customers.CustomerID
。因此,您需要在
客户
上使用此功能:

INDEX(CustomerID)
INDEX(CustomerID)

(注意:由于
主键
是一个索引,如果您已经有
主键(CustomerID)
,则无需添加
索引。如果您为每个表显示
SHOW CREATE TABLE
,则会有所帮助。)

给出您的预期输出是的……但我想知道索引在join语句中是否起作用以及如何起作用?explain语句将告诉您是否使用了索引(很可能会使用)