mysql - 添加 order by 后查询执行时间增加

标签 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

输出正确,但执行时间较长。但如果我删除订单,那么执行时间就会大大减少。我尝试按升序排列,但仍然需要更多时间

最佳答案

我怀疑你的表格设计不正确。

我认为您的 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/

相关文章:

java - 无法访问 MySql 表中的列

mysql - 如何查询 mysql 表以获取列的当前值和当天的最大值

mysql - 我的 SQL 唯一值 - 意外结果

php - 带有数组的 MySQL WHERE 子句包含键

sql-server - sql server 命令奇怪,负字符

Mysql ORDER BY 或 MAX() 用于多个表字段排序?

mysql - SQL ORDER BY 与数字的困境

mysql - 如何向空 SQL 表添加序号

mysql - 一条sql语句联合父子表获取两张表的记录

PHP mysql fetch 不返回值