我应该在 Spring Boot 应用程序中转换数据库或服务层中的时间戳吗?

问题描述 投票:0回答:1

我有关于数据性能的问题

时间值在我的 Spring Boot 应用程序中存储得一样长。

当我检索多个数据时,我使用 Date_Format FROM_UNIXTIME 转换时间,如下所示

 @Query("SELECT new today.feeling.dto.response.emotion.EmotionMonthlyReportQuery(" +
        "s.id, " +
        "s.studentId, " +
        "s.name, " +
        "CAST(DATE_FORMAT(FROM_UNIXTIME(e.emotionTime / 1000, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d') AS string) AS emotion_date, " +
        "CAST(SUM(CASE WHEN e.emotionType = 1 THEN e.emotionLevel ELSE 0 END) / COUNT(CASE WHEN e.emotionType = 1 THEN 1 END) AS FLOAT), " +
        "CAST(SUM(CASE WHEN e.emotionType = 2 THEN  e.emotionLevel ELSE 0 END) / COUNT(CASE WHEN e.emotionType = 2 THEN 1 END) AS FLOAT), " +
        "CAST(SUM(CASE WHEN e.emotionType = 3 THEN e.emotionLevel ELSE 0 END) / COUNT(CASE WHEN e.emotionType = 3 THEN 1 END) AS FLOAT), " +
        "CAST(SUM(CASE WHEN e.emotionType = 4 THEN e.emotionLevel ELSE 0 END) / COUNT(CASE WHEN e.emotionType = 4 THEN 1 END) AS FLOAT)) " +
        "FROM Emotion e " +
        "JOIN Student s ON s.id = e.student.id " +
        "WHERE s.isRemoved = FALSE AND s.classroom.id = :classroomId AND s.year = :year AND e.emotionTime BETWEEN :startDate AND :endDate " +
        "GROUP BY s.id, emotion_date " +
        "ORDER BY s.studentId, emotion_date")
List<EmotionMonthlyReportQuery> getEmotionMonthlyReportList(@Param("classroomId") Long classroomId,
                                                            @Param("year") Integer year,
                                                            @Param("startDate") long startDate,
                                                            @Param("endDate") long endDate);

直接在DB中转换时间好还是在服务层转换时间好?

我想知道哪种方法在性能或代码分离方面更好

mysql spring database spring-boot performance
1个回答
0
投票

使用函数将数据转换为字段会导致索引失败吗?当然如果数据量比较小的话应该没问题。 如果在检测后在Service层代码中进行转换(比如使用Redis缓存来提高性能),性能扩展性会好很多。 你写的SQL,我看了一下,可能会引起临时表,甚至文件排序哦。恐怕性能会出现大问题。 总之,在不考虑性能的前提下,使用MySQL的功能还是相当方便的。

© www.soinside.com 2019 - 2024. All rights reserved.