我对下面的解释计划有疑问。这是非常基本的,每个连接都使用一个索引(虽然不是唯一的),并且需要 5 个多小时。最大的表有大约 100k 条记录。 RAM 和 CPU 没有 Hook 或任何东西,没有其他查询运行,没有表锁。我拥有的最“复杂”的部分是外部连接中的合并。这是要了我的命吗?
为澄清起见,我将两次加入同一个表,因为有些记录有用户 ID,有些只有名字/姓氏。显然我更喜欢通过唯一的用户名加入,并且选择的项目之一是 coalesce(u1.job_title, u2.job_title)
from utilization_incident ui
left join users_utilization_v u1
on u1.cc_user_id = ui.assigned_to_user_id
and u1.source_system = ui.source
and u1.data_date = ui.data_date
left join users_utilization_v u2
on u2.first_name = ui.assigned_to_first_name
and u2.last_name = ui.assigned_to_last_name
and u2.source_system = ui.source
and u2.data_date = ui.data_date
left join lkp_job_title_service_area jtsa
on jtsa.job_title = coalesce(u1.job_title, u2.job_title)
最佳答案
CPU可能不 Hook ,但I/O呢?
多少内存? innodb_buffer_pool_size
的值是多少?
请提供SHOW CREATE TABLE
。
请提供完整的SELECT
。
请提供 EXPLAIN SELECT ...
的文本版本。
等待进一步的详细信息,这些索引应该有助于:
users_utilization_v: INDEX(cc_user_id, source_system, data_date)
users_utilization_v: INDEX(first_name, last_name, source_system, data_date)
lkp_job_title_service_area: INDEX(job_title)
删除 LEFT
除非你需要它。
关于MySQL 基本查询耗时特别长 - 解释计划看起来不错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40137047/