MySQL 基本查询耗时特别长 - 解释计划看起来不错

标签 mysql performance join coalesce explain

我对下面的解释计划有疑问。这是非常基本的,每个连接都使用一个索引(虽然不是唯一的),并且需要 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)

enter image description here

最佳答案

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/

相关文章:

mysql - SQL Join 2个表并得到各自的答案

mysql - 在 MySQL 中连接两个表时避免重复

python - Flask-mysqldb数据库游标

html - 元素上有很多 CSS 类还是一个特定类?

java - BufferReader的高效实现

sql - MySQL - 基于日期加入

mysql外连接在哪里

mysql - mysql 中的存储过程在工作台中显示错误

带有本地数据库的Android APP

MySQL 因表中文本字段较大而运行缓慢