我无法理解我的SQL查询有什么问题。
我已经尝试索引所需的列,但它并不好。
这是我的查询的一部分,(这似乎是一个问题)
select
t1.column1,
t2.column2,
t1.column3,
t1.column4,
t1.column5
from
table_1 as t1
left join
(select
column1,
column2,
column3
from
table_2
where
column3 = 1) as t2
on t1.column1 = t2.column1
order by
t1.column1
我也尝试了以下内容
select
t1.column1,
t2.column2,
t1.column3,
t1.column4,
t1.column5
from
table_1 as t1
left join table_2 as t2
on t1.column1 = t2.column1
and t2.column3 = 1
order by
t1.column1
当表中的数据超过3k时,上面的代码执行缓慢。检索信息通常需要几毫秒,但当数据增加到2k-10k时需要2秒或3秒。
我想知道是否有任何解决方案来提高上述SQL查询的性能。
我发现的问题来自于逐语。
如果没有真实表的上下文,没有人会知道辅助表的多行可能性。也就是说,你将获得table1中的每一行,但是如果table2中有多行,你将返回多行(这是可以的)。
希望优化查询的唯一真正方法是使用适当的索引。
你的Table1应该在(column1)上有一个索引,因为它是ORDER BY子句的基础......如果你在表1中应用WHERE子句来优化对这些记录的过滤,你还可以添加其他列。
对于Table2,最好在3个字段上按顺序(column3,column1,column2)设置覆盖索引。 Column3由于WHERE子句而优化。第1列,因为它是表1的LEFT-JOIN的基础。最后是column2,因为如果找到这样的记录,那么你就是从子查询中提取的唯一列。
在子查询中,您甚至不需要返回column3,因为您将它预先限定为特定值,并且它不会在最终结果集中使用。
不,mysql性能取决于结果数据的长度,而不是查询。谢谢