我使用以下查询从四个表的 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
输出正确,但执行时间较长。但如果我删除订单,那么执行时间就会大大减少。我尝试按升序排列,但仍然需要更多时间
最佳答案
我怀疑你的表格设计不正确。
我认为您的 log_table.id
列中有重复出现的值,因为我怀疑它并没有真正具有主键的唯一索引或正确的主键,因为它的 id
列也兼作公司 ID。这就是为什么我有这个想法:
ON company_table.id = log_table.id
AND company_table.department = log_table.dept
如果这些列中的一个或两个是/构成您的主键(我怀疑它们不是),那么它们不是正确的选择。
因此,它可以很好地按照找到的顺序检索内容,但是在排序时必须做一些额外的工作,因为您可能会出现冲突的值,并且您必须加入
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
。
关于mysql - 添加 order by 后查询执行时间增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44798490/