Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

共进行三种查询:带值过滤的原始数据查询;带值过滤的聚合查询(Count和Max_Value两种),带值过滤的group by查询(Count和Max_Value两种+10-1000不同粒度)

实验结果

Image Removed

如上表所示,可以发现,在进行原始数据查询和聚合查询时,当选择率较低的场景下,查询执行时间有明显的提升,选择率大于50%以后与原有时间持平。

实验代码

...

languagejava

...

以在集种分布下选择率为0的查询为例:

select s0 from root.sg1.d1 where s0<0

...


select s0 from root.sg1.d1 where s0<0

...


select max_value(s0) from root.sg1.d1 where s0<0

...

select count(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 10ms)

...

select max_value(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 10ms)

...

select count(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 100ms)

...

select max_value(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 100ms)

...

select count(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 1000ms)

...

select max_value(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 1000ms)

实验结果

Image Added


Image Added

Image Added

如上表所示,可以发现,在进行原始数据查询和聚合查询时,当选择率较低的场景下,查询执行时间有明显的提升,选择率大于50%以及groupby查询的场景下与原有时间持平。


实验代码

Code Block
languagejava
import org.apache.iotdb.jdbc.IoTDBSQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCQuery {",
                    "select max_value(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 1000ms)",
                    "select max_value(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 1000ms)",
                    "select max_value(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 1000ms)",
                    "select max_value(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 1000ms)",
                    "select max_value(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 1000ms)",
                    "select max_value(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 1000ms)",
                    "select max_value(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 1000ms)"
            };

    public static void main(String[] args) throws ClassNotFoundException, SQLException {


        Class.forName("org.apache.iotdb.jdbc.IoTDBDriver");
        try (Connection connection =
                     DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
             Statement statement = connection.createStatement()) {

            //String setsql JDBC= fetchSize
"select s0           statement.setFetchSize(10000);
            String sql = sqls[0]from root.sg1.d1 where s0<0";
            System.out.println(sql);
            long startTime=System.currentTimeMillis();
            ResultSet resultSet = statement.executeQuery(sql);
            outputResult(resultSet);
            long endTime=System.currentTimeMillis();
            System.out.println("time: "+(endTime-startTime)+"ms");
        } catch (IoTDBSQLException e) {
            System.out.println(e.getMessage());
        }
    }

    private static void outputResult(ResultSet resultSet) throws SQLException {
        if (resultSet != null) {
            System.out.println("--------------------------");
            System.out.println();
            while (resultSet.next()) {
            }
        }
        System.out.println("--------------------------\n");
    }
}

...