mysql - SQL INNER join 执行时间太长

标签 mysql sql inner-join

我有下面的 sql 查询,执行时间太长,请问有内部联接的替代方案来解决我的问题吗?因为当我删除 3 或 4 个联接时,查询执行得更快。

SELECT  p.first_name, p.last_name, p.x, p.dob,'name', w.id_table1, w.type, w.stype, w.ploc, w.dat, w.created_at,  av.item as table1_edge , av1.item as sdf ,av2.item as sd, av3.item as odor, av4.item as xz, av5.value as xxx , av9.item as cc, av10.item as cxz                        
                    FROM table1 w 
                    INNER JOIN table2 a  ON w.id_table1 = a.table1_id_table1
                    INNER JOIN table3 av ON a.id_table2 = av.id_table3 and av.sub_group = 'x1'
                    INNER JOIN table3 av1 ON a.id_table2 = av1.id_table3 and av1.sub_group = 'x2'
                    INNER JOIN table3 av2 ON a.id_table2 = av2.id_table3 and av2.sub_group = 'x3'
                    INNER JOIN table3 av3 ON a.id_table2 = av3.id_table3 and av3.sub_group = 'x4'
                    INNER JOIN table3 av4 ON a.id_table2 = av4.id_table3 and av4.sub_group = 'x5'
                    INNER JOIN table3 av5 ON a.id_table2 = av5.id_table3 and av5.sub_group = 'x6' and av6.item like 's%'
                    INNER JOIN table3 av6 ON a.id_table2 = av6.id_table3 and av6.sub_group = 'x7' and av6.item like 'x%'
                    INNER JOIN table3 av7 ON a.id_table2 = av7.id_table3 and av7.sub_group = 'x8' and av6.item like 'z%'
                    INNER JOIN table3 av8 ON a.id_table2 = av8.id_table3 and av8.sub_group = 'x9' and av6.item like 'y%' 
                    INNER JOIN table3 av9 ON a.id_table2 = av9.id_table3 and av9.sub_group = 'x10'
                    INNER JOIN table3 av10 ON a.id_table2 = av10.id_table3 and av10.sub_group = 'x11'
                    INNER JOIN table0 p ON w.table0_id_table0 = p.id_table0
                    where w.created_at between '1991-12-09 00:00:00' and now() and user_id_user = 4

数据:
表0
名字
姓氏
出生日期
...
table1
id_table1
类型
stype
...

最佳答案

您是否尝试过使用子查询来代替执行时间较长的内部联接?

示例:

select a.id, b.id, c.id
from table a
inner join (
   select id
   from tableb
   where b = 'x1'
) as b on b.id = a.id
inner join (
   select id
   from tablec
   where c = 'x2'
) as c on c.id = a.id

关于mysql - SQL INNER join 执行时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39931521/

相关文章:

php - 如何从mysql中提取列名和php中的条目,列名只显示一次

php - Mysql 中的同步算术函数

MySQL如何在排序查询结果时进行分组?

MySQL 内连接 2 个表并按表 1 中的 ID 对表 2 进行计数

mysql - 如何使用另一个条件(例如 "name"而不是mysql中的id)从共享id的数据库中删除行

javascript - 如何使用 PHP 和 Javascript 将来自 MySQL 的数据显示到标记上的传单弹出窗口中?

mysql - SQL按两列排序,忽略null

mysql - MYSQL 中的数组迭代

sql - 每个组的 postgresql 序列号

php - 如何获取与mysql中的concat值字段相关的COUNT和INNER JOIN