【问题标题】:Why does this left outer join query refuse to complete in phpMyAdmin?为什么这个左外连接查询拒绝在 phpMyAdmin 中完成?
【发布时间】:2011-04-28 19:35:19
【问题描述】:

已编辑:所以查询确实有效,但在我的 localhost 机器上运行需要一分钟。诚然,我的本地主机上的表要大得多(每个大约 8000 行),但在生产中,每个表可能有超过 25,000 行。有什么办法可以优化这个,所以它不会花很长时间?如其中一个 cmets 所示,两个表都已编入索引。

我有两个表,jos_eimcart_customers_addresses 和 jos_eimcart_customers。我想从客户表中提取所有记录,并在地址表中包含可用的地址信息。我有一个我认为是相当普通的左外连接查询,但它在 phpMyAdmin 中一直超时,即使它应该找到的结果并不多。谁能指出我做错了什么?我没有收到 mySQL 错误。

select 
    c.firstname,
    c.lastname,
    c.email as customer_email, 
    a.email as address_email,
    c.phone as customer_phone,
    a.phone as address_phone,
    a.company,
    a.address1,
    a.address2,
    a.city,
    a.state,a.zip, 
    c.last_signin
from jos_eimcart_customers c
    left outer join  jos_eimcart_customers_addresses a  
    on c.id = a.customer_id  
order by c.last_signin desc

【问题讨论】:

  • 表格的大小(以行为单位)是多少?有索引吗?
  • 两者都有索引,并且两个表的行数都不超过 100 行。
  • 看起来这个查询实际上已经使我们的数据库服务器崩溃了,尽管它正在处理已经被索引的非常小的表。我在更大的表上运行了更复杂的查询,那么这个特定的有什么问题?

标签: mysql outer-join


【解决方案1】:

你需要一个 group by 子句:

SELECT 
  c.firstname, 
  c.lastname, 
  c.email AS customer_email, 
  a.email AS address_email, 
  c.phone AS customer_phone, 
  a.phone AS address_phone, 
  a.company, 
  a.address1, 
  a.address2, 
  a.city, 
  a.state, 
  a.zip, 
  c.last_signin 
FROM jos_eimcart_customers c 
LEFT OUTER JOIN jos_eimcart_customers_addresses a ON c.id = a.customer_id 
GROUP BY 
  c.firstname, 
  c.lastname, 
  c.email AS customer_email, 
  a.email AS address_email, 
  c.phone AS customer_phone, 
  a.phone AS address_phone, 
  a.company, 
  a.address1, 
  a.address2, 
  a.city, 
  a.state, 
  a.zip, 
  c.last_signin 
ORDER BY c.last_signin DESC

【讨论】:

    【解决方案2】:

    您的查询没有任何问题(假设计数如您所说)。您的服务器中正在发生其他事情。

    它有没有可能正在等待锁?

    【讨论】:

    • 我不这么认为;我怎么知道?
    • 在运行时运行“显示进程列表”。您可以查看您的查询正在做什么(发送数据、锁定等)。
    • 我不认为我可以在 phpMyAdmin 中做到这一点,这是我对服务器的唯一访问权限。
    • 请您的 DBA 在查询运行时在服务器上提取有关正在发生的事情的信息。他会知道该怎么做...
    猜你喜欢
    • 2017-11-18
    • 2017-01-16
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多