【发布时间】:2016-07-07 14:50:50
【问题描述】:
我有这 2 两个视图。我对它们进行了查看,因为它们依赖于其他表。然后我创建了一个将它们连接在一起的查询。两个查询分别有超过 30k 的数据。
示例查询如下:
Select main.*, detail.*
FROM main_data as main
INNER JOIN detail_data AS details ON (main.id = detail.main_id)
WHERE main.column_data LIKE '%something%'
这很慢,但是如果我注释掉列部分上的“detail.*”,并且存在连接,则返回数据的速度非常快。这里有什么问题? 预期的数据量只有 20 行。执行选择仍然需要很长时间。是什么让它变慢了?
我想补充一点,视图上的连接表是正确的。它被相应地加入。就像我说的,如果单独查询,它会在很短的时间内返回大量数据。
有关更多详细信息,实际上这里还有第三个表,两个表都是子表。我把它改成了这样。它提高了一点性能。
Select main.*, detail.*
FROM parent_data AS par
INNER JOIN main_data as main ON (par.id = detail.par_id)
INNER JOIN detail_data AS details ON (par.id = detail.par_id)
WHERE main.column_data LIKE '%something%'
我在确切的表上做了一个 EXPLAIN SELECT,结果如下:
谢谢。
【问题讨论】:
-
你为什么不直接
SELECT *? -
还是和“main.*, detail.*”一样……很慢。
-
这些列是否已编入索引?
-
show details_data sechema..you can share "show create table details_data" 输出...
-
是的,它们已编入索引。
标签: mysql performance select