为什么在mysql

时间:2017-10-04 13:53:38

标签: mysql sql performance

我是编程新手。有一个查询有时可以工作,但有时根本不起作用。我的意思是如果结果不仅仅是一行它变得太慢了。如果结果是几百行,则根本不起作用。我知道在查询中使用'like'并不是最好的,但我没有其他选择(或者我只是不知道)。 请帮我优化我的查询。 我应该使用不同的“where”选项运行此查询(第一部分将始终相同)。我应该将第一部分存储在一个函数中吗?它会使查询更快吗?

SELECT a.*,
       group_concat(DISTINCT concat(' ', b.name)),
       group_concat(DISTINCT concat(' ', e.name)),
       group_concat(DISTINCT concat(' ', g.name))
FROM t1 a
     LEFT JOIN t2 c
     INNER JOIN t3 b ON c.id = b.id ON a.id = c.id
     LEFT JOIN t4 d
     INNER JOIN t5 e ON e.code = d.code ON a.id = d.id
     LEFT JOIN t6 f
     INNER JOIN t7 g ON g.code = f.code ON a.id = f.id
WHERE a.x LIKE '%5%'
GROUP BY a.id;

提前谢谢!

2 个答案:

答案 0 :(得分:4)

无条件的连接是交叉连接。在您的查询中,有三个此类联接:t2t4t6表。 CROSS JOIN是一个JOIN操作,它产生两个表的笛卡尔积。它将生成将第一个表中的每一行与第二个表中的每一行组合在一起的行。性能很差,因为交叉连接会产生太多行。请参阅文档:https://www.w3resource.com/sql/joins/cross-join.php

答案 1 :(得分:-4)

如果a.x是varchar字段,请使用类似

的内容
  

全文索引

我不确定mysql是否有它但尝试一下 这是我在SQL Server中使用的

相关问题