• sql优化


     

    SELECT
        *
    FROM
        d_secondMinuteData AS fd
    WHERE
        fd.collectionTime BETWEEN '2022-04-01 00:00:00'
    AND '2022-04-08 23:59:59'
    AND fd.stationBranchId = 2287
    AND DATE_FORMAT(
        fd.collectionTime,
        '%H:%i:%s'
    ) = '00:00:00'
    
    
    
    
    SELECT
        *
    FROM
        d_secondMinuteData AS fd
    WHERE
        fd.stationBranchId = 2287
    AND fd.collectionTime IN (
        '2022-04-01 00:00:00',
        '2022-04-02 00:00:00',
        '2022-04-03 00:00:00',
        '2022-04-04 00:00:00',
        '2022-04-05 00:00:00',
        '2022-04-06 00:00:00',
        '2022-04-07 00:00:00',
        '2022-04-08 00:00:00'
    )

     collectionTime是索引,但是用函数处理索引字段会导致索引失效,但是用in不会导致索引失效,所以两个sql的效率相差很大

    开始日期和结束日期可以用下面函数处理成list

    com.rn.smart.monitor.utils.UtilTime#getBetweenTwoDateList

    /****
         * 求两个日期间月份,天,小时集合
         *
         * @param startDateStr
         *            开始时间
         * @param endDateStr
         *            结束时间
         * @param type
         *            类型: 1:月份,2:天,3:小时,4:天(显示格式02-04 二月四号,只有月和日),5:天(显示格式:03,
         *            月份已经限定在一个月,只显示今天是几号)
         * @return
         * @throws ParseException
         */
        public static List<String> getBetweenTwoDateList(String startDateStr,
                                                         String endDateStr, int type) throws ParseException {
            List<String> list = new LinkedList<String>();
            DateFormat simpleDateFormat;
            Date startDate;
            Date endDate;
            try {
                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                startDate = simpleDateFormat.parse(startDateStr); // 开始日期
                endDate = simpleDateFormat.parse(endDateStr); // 结束日期
            } catch (Exception ex) {
                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                startDate = simpleDateFormat.parse(startDateStr); // 开始日期
                endDate = simpleDateFormat.parse(endDateStr); // 结束日期
            }
    
            Calendar startCalendar = Calendar.getInstance();
            Calendar endCalendar = Calendar.getInstance();
            startCalendar.setTime(startDate);
            endCalendar.setTime(endDate);
            String result = null;
            while (startCalendar.compareTo(endCalendar) <= 0) {
                startDate = startCalendar.getTime();
                switch (type) {
    
                    case 0:
                        result = new SimpleDateFormat("yyyy-MM-dd 00:00:00")
                                .format(startDate);
                        result = result.substring(0, result.length());
                        list.add(result);
                        // 开始日期加一个天直到等于结束日期为止
                        startCalendar.add(Calendar.DAY_OF_MONTH, 1);
                        break;
                    case 1:
                        result = new SimpleDateFormat("yyyy-MM").format(startDate);
                        result = result.substring(0, result.length());
                        list.add(result);
                        // 开始日期加一个月直到等于结束日期为止
                        startCalendar.add(Calendar.MONTH, 1);
                        break;
                    case 2:
                        result = new SimpleDateFormat("yyyy-MM-dd").format(startDate);
                        result = result.substring(0, result.length());
                        list.add(result);
                        // 开始日期加一个天直到等于结束日期为止
                        startCalendar.add(Calendar.DAY_OF_MONTH, 1);
                        break;
                    case 4:
                        result = new SimpleDateFormat("MM-dd").format(startDate);
                        result = result.substring(0, result.length());
                        list.add(result);
                        // 开始日期加一个天直到等于结束日期为止
                        startCalendar.add(Calendar.DAY_OF_MONTH, 1);
                        break;
                    case 5:
                        result = new SimpleDateFormat("dd").format(startDate);
                        result = result.substring(0, result.length());
                        list.add(result);
                        // 开始日期加一个天直到等于结束日期为止
                        startCalendar.add(Calendar.DAY_OF_MONTH, 1);
                        break;
                    default:
                        result = new SimpleDateFormat("yyyy-MM-dd HH")
                                .format(startDate);
                        result = result.substring(0, result.length());
                        list.add(result);
                        // 开始日期加一个月直到等于结束日期为止
                        startCalendar.add(Calendar.HOUR, 1);
                        break;
                }
            }
            return list;
        }
  • 相关阅读:
    设计模式开始--工厂模式
    设计模式开始--UML类之间关系表示
    设计模式开始1--不明觉厉
    Gas Station
    Validate Binary Search Tree
    Word Ladder
    (转)基于快速排序的TOPK算法
    Number of 1 Bits
    Word Search
    Rotate Array
  • 原文地址:https://www.cnblogs.com/LcxSummer/p/16118377.html
Copyright © 2020-2023  润新知