3

我正在做一些与 TPC-H 相关的事情。

我在几个文件中有 sql 语句。我需要执行它们并记录执行时间,如下所示:

13 rows in set (0.00 sec)

我还需要结果集来查看我是否得到了正确的结果。
我的平台是 linux(centOS)。

如果我手动执行此操作,我将在 mysql 中键入如下语句:

  shell> mysql -u tpch -p
  mysql> use tpch;
  mysql> source /home/liova/download/tpch/queries/Q1.sql;
  mysql> source /home/liova/download/tpch/queries/Q2.sql;
4

2 回答 2

5

要找到执行时间,您应该在程序开始时初始化一个日期对象,然后在程序结束时将其与另一个日期对象进行比较。这将为您提供执行所需时间的整数值。然后在任何需要的地方使用这个 int(例如将它打印到控制台、文件等)

Date startDate = new Date();
//Run the rest of the program
Date endDate = new Date();
int msElapsedTime = startDate.getTime() - endDate.getTime();

如果您不需要在 Java 程序中执行与查询结果相关的任何操作,则可以使用runtime.exec()mysql 执行查询来保持这个非常简单。这里唯一的主要缺点是您无法打印出受影响的行数:

Date startDate = new Date();
runtime.exec("mysql db_name < /home/liova/download/tpch/queries/Q1.sql");
Date endDate = new Date();
int msElapsedTime = startDate.getTime() - endDate.getTime();

如果你真的需要对结果做点什么,那runtime.exec()对你来说是不够的。继续阅读...

要阅读 SQL 源代码,只需将其作为文本文件阅读。如果您将 SQL 的每一行作为单独的 SQL 查询,这将是最简单的,因为否则您将不得不进行一些解析和调整。这是一次读取一行文件的示例。

To run the SQL, use JDBC. Here's a tutorial on it. Items 1 through 5 will detail everything you should need for running the sql and using the results (from establishing your sql connection to running the query to processing the resultSet object that comes back). If any of these steps cause you trouble, your best bet is to ask a separate question tailored to the specific problem you are having in the process.

于 2012-05-10T14:31:20.030 回答
0

检查你有正确的结果。

选项 1 现场测试。可以像记录数这样简单,或者 Fred 的名字现在应该是 Bloggs。

选项 2 对上述内容的一个微妙扩展,将是一个不同的查询,它应该得到相同的结果。当我说不同时,我的意思是不同,而不是重新排序列。

选项3,我个人最喜欢的。您有一个文件,其中包含您期望的结果(csv、xml?),然后您将得到的结果与它进行比较。

所以 Test1 运行 SQLTest1.sql 以某种有用的格式将其输出到 SQLTest1.Actual,然后将其与 SQLTest1.Expected 进行比较。

一旦您获得了可接受的结果文件格式,工作就接近完成,您可以轻松地进行更多测试。

于 2012-05-10T14:17:24.007 回答