提高JOIN查询速度

时间:2013-02-28 20:43:22

标签: mysql sql

我有这个简单的连接,效果很好,但我觉得很慢,因为技术表非常大。有许多uid实例,因为它跟踪uid的时间戳,因此是不同的。加快查询速度的最佳方法是什么?

SELECT DISTINCT tech.uid, 
                listing.empno, 
                listing.firstname, 
                listing.lastname 
FROM   tech, 
       listing 
WHERE  tech.uid = listing.empno 
ORDER  BY listing.empno ASC 

2 个答案:

答案 0 :(得分:4)

首先在各自的表上添加一个索引到tech.UID和listing.EmpNo。 在确定有索引之后,您可以尝试重写这样的查询:

SELECT DISTINCT tech.uid, listing.EmpNo, listing.FirstName, listing.LastName
FROM  listing INNER JOIN tech ON tech.uid = listing.EmpNo
ORDER BY listing.EmpNo ASC;

如果它仍然不够快,请在查询之前放置EXPLAIN一词,以获得有关查询执行计划的一些提示。

EXPLAIN SELECT DISTINCT tech.uid, listing.EmpNo, listing.FirstName, listing.LastName
    FROM  listing INNER JOIN tech ON tech.uid = listing.EmpNo
    ORDER BY listing.EmpNo ASC;

发布解释结果,以便我们获得更好的洞察力。

希望它有所帮助,

答案 1 :(得分:1)

  1. 这是一个非常简单的查询。如果没有索引,只能在SQL中执行 - 可以在JOIN / WHERE和ORDER BY子句(tech.uid,listing.empno)中使用的字段上添加索引

  2. 如果JOIN个字段的值为NULL,则可能会破坏您的效果。您应该在WHERE子句(WHERE tech.uid is not null and listing.empno not null)中过滤它们。如果JOIN字段上有许多行NULL - 该数据可能会产生笛卡尔结果(不确定这是如何用英语调用的)可能包含大量行数。

  3. 您可以更改MySQL配置。有许多选项可用于性能调整,例如key_buffer_size,sort_buffer_size,tmp_table_size,max_heap_table_size,read_buffer_size等。