我使用以下查询从四个表
中的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
输出正确但执行时间较长。但如果我删除订单,则执行时间会减少相当多。我通过升序尝试顺序仍需要更多时间
答案 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
。