我正在尝试提高此查询的性能,因为它需要 3-4 秒才能执行。这是查询
SELECT SQL_NO_CACHE
ac.account_id,
ac.account_name,
cl.name AS client_name,
IFNULL(cn.contact_number, "") AS Phone
FROM accounts AS ac
STRAIGHT_JOIN clients AS cl ON cl.client_id = ac.client_id
LEFT JOIN (
SELECT bc.contact_number, bc.account_id
FROM contact_numbers AS bc
INNER JOIN (
SELECT account_id, MAX(number_id) AS number_id
FROM contact_numbers
WHERE status = 1 AND contact_type != "Fax" AND contact_link = "Account"
GROUP BY account_id
) AS bb ON bb.number_id = bc.number_id
) AS cn ON ac.account_id = cn.account_id
WHERE ac.status = 1
ORDER BY ac.account_name
LIMIT 0, 100
客户表包含大约 10 行,这就是我直接加入的原因。帐户表包含 350K 记录。contact_numbers 包含大约 500k 条记录,我认为这里的问题是左联接和 ORDER BY,但我不知道如何解决它。此外,我正在使用 SQL_NO_CACHE,因为帐户、contact_numbers 表正在快速更新。
我还能做些什么来提高此查询的性能?
这是关于这个查询的解释的截图
我正在使用 MySQL 5.6.13 我设置 sort_buffer_size=1M 我的服务器有 32GB 的 RAM