Mysql 索引和联接
我知道索引是如何为表工作的 但是我想知道我是否在CustomerID列上触发了下面的join语句和索引,在这种情况下,索引扮演任何角色如果是的话,那么如何或者有其他方法来创建索引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
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语句将告诉您是否使用了索引(很可能会使用)