添加订单后,查询执行时间会增加

时间:2017-06-28 09:21:52

标签: mysql sql-order-by

我使用以下查询从四个表

中的15列中获取数据
SELECT company_table.some_values,
        log_table.somevalues,
        employee_table.somevalues,
        manager_table.somevalues

FROM company_table

JOIN log_table 
ON company_table.id = log_table.id 
AND company_table.department = log_table.dept 

JOIN employee_table 
ON employee_table.id = log_table.id 
AND employee_table.year = log_table.joining 
AND employee_table.department = log_table.dept 

JOIN manager_table 
ON manager_table.id = log_table.id 
AND manager_table.year = log_table.joining 
AND manager_table.department = log_table.dept 

ORDER BY log_table.id DESC

输出正确但执行时间较长。但如果我删除订单,则执行时间会减少相当多。我通过升序尝试顺序仍需要更多时间

1 个答案:

答案 0 :(得分:0)

我怀疑你的桌子设计不正确。

我认为您的log_table.id列中有重复出现的值,因为我怀疑它并不真正拥有主键或正确主键的唯一索引,因为其id列加倍为公司ID也。这就是我有这个想法的原因:

ON company_table.id = log_table.id 
AND company_table.department = log_table.dept 

如果这些列中的任何一个或两个都是/构成您的主键,我怀疑它们不是,它们不是正确的选择。

因此它可以很好地按照找到的顺序检索事物,但是在订购时需要做一些额外的工作,因为你可能会有碰撞的值,而且你必须join开启2列。

如果以上是真的,你可以试试这个。 在尝试之前备份,或尝试开发。

尝试为主键添加新列并对其进行排序:

ALTER TABLE log_table DROP PRIMARY KEY;
ALTER TABLE log_table ADD pk_column INT AUTO_INCREMENT PRIMARY KEY;

然后ORDER BY pk_column DESC。

如果您已在log_table中指定了另一列作为主键,请改为order by