加速超时的MySQL查询

时间:2017-10-16 19:05:59

标签: mysql query-optimization

我正在尝试从多个表中获取需要合并在一起进行报告的数据。我试图获取在某个日期之后完成的每个标题的所有细节,并且必须检查0日期,因为数据不好。

我正在使用遗留表,遗憾的是,我没有创建,也无法更改。此语句在我的应用程序中超时,并且对本地虚拟机上的数据库运行大约需要40秒。是否可以重构查询以获得更好的性能?任何帮助表示赞赏!

const PORT = (process.env.PORT || 4200);
const runServer = (app)=> {
    app.listen(PORT, ()=> {
        debug(`Listening on http://localhost:${PORT}`);
        if (__DEV__)
            debug(`HMR on http://localhost:${config.BS_PORT}`);
    });
}


runServer(app);

2 个答案:

答案 0 :(得分:1)

header

INDEX(orderstatus, dateapply)
INDEX(invoice, orderstatus, dateapply)

detail

INDEX(invoice, dateapply)
INDEX(dateapply, invoice)

列的排序是有意的。由于我无法分辨优化器将从哪个表开始,因此我提供了应该是最佳方式的索引。

如果两个dateapply列同步,则可能会进一步优化。

答案 1 :(得分:-1)

在我的同事和我之间,我们提出了以下查询,更快地返回结果。 GROUP BY消除了重复记录。我要感谢大家花时间帮我看看我的问题,并期待将来使用索引的可能性。

package main;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;



public class Main extends Application {
    private Canvas can;
    private GraphicsContext gc;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        Pane root = new Pane();
        Scene scene = new Scene(root, 800, 400);

        stage.setTitle("Test");

        can = new Canvas(scene.getWidth(), scene.getHeight());
        gc = can.getGraphicsContext2D();

        root.getChildren().add(can);

        stage.setResizable(false);
        stage.setScene(scene);
        stage.show();



        InputStream is = Main.class.getResourceAsStream("Font/SSF4ABUKET.ttf");
        Font font = Font.loadFont(is, 30);
        gc.setFont(font);
        gc.setFill(Color.RED);
        gc.fillText("This is a test", 10, 200);
    }
}