我知道索引如何适用于表...
但是我想知道如果我在列CustomerID上触发以下连接语句和索引,在这种情况下索引播放任何角色,如果是,那么如何或是否有其他方法来创建索引?
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
答案 0 :(得分:0)
当JOINing
表时,优化程序首先决定从哪个表开始。在您的特定示例中,没有WHERE
,但有一个ORDER BY
。因此,优化程序可能决定从表ORDERed
开始。 可以避免排序。
假设它以Orders
开头以避免排序,您需要Orders
:
INDEX(CustomerID)
JOIN
中的第二个表格是Customers
。在查看Customers
后进入Orders
,您有ON Orders.CustomerID = Customers.CustomerID
。因此,您需要Customers
:
INDEX(CustomerID)
(注意:由于PRIMARY KEY
是一个索引,如果您已经INDEX
,则无需添加PRIMARY KEY(CustomerID)
。如果您向我们展示{{1},这将有所帮助对于每个表。)