package my.test.command.dml;
import my.test.TestBase;
public class DeleteTest extends TestBase {
public static void main(String[] args) throws Exception {
new DeleteTest().start();
}
@Override
public void init() throws Exception {
// 见org.h2.message.TraceSystem
// 0: OFF, 1: ERROR,2: INFO,3: DEBUG,4: ADAPTER
// 值越大,那么能跟踪的信息就越详细
// prop.setProperty("TRACE_LEVEL_SYSTEM_OUT", "2");
}
void create() throws Exception {
stmt.executeUpdate("drop table IF EXISTS DeleteTest");
stmt.executeUpdate("create table IF NOT EXISTS DeleteTest(id int, name varchar(500), b boolean)");
stmt.executeUpdate("CREATE INDEX IF NOT EXISTS DeleteTestIndexId ON DeleteTest(id)");
stmt.executeUpdate("CREATE INDEX IF NOT EXISTS DeleteTestIndexName ON DeleteTest(name)");
// for(int i=0;i<5000; i++) {
for (int i = 500; i > 0; i--) {
stmt.executeUpdate("insert into DeleteTest(id, name, b) values(" + i + ", 'a1', true)");
stmt.executeUpdate("insert into DeleteTest(id, name, b) values(" + i + ", 'b1', true)");
stmt.executeUpdate("insert into DeleteTest(id, name, b) values(" + i + ", 'a2', false)");
stmt.executeUpdate("insert into DeleteTest(id, name, b) values(" + i + ", 'b2', true)");
stmt.executeUpdate("insert into DeleteTest(id, name, b) values(" + i + ", 'a3', false)");
stmt.executeUpdate("insert into DeleteTest(id, name, b) values(" + i + ", 'b3', true)");
// stmt.executeUpdate("insert into DeleteTest(id, name, b) values(1, 'a1', true)");
// stmt.executeUpdate("insert into DeleteTest(id, name, b) values(1, 'b1', true)");
// stmt.executeUpdate("insert into DeleteTest(id, name, b) values(2, 'a2', false)");
// stmt.executeUpdate("insert into DeleteTest(id, name, b) values(2, 'b2', true)");
// stmt.executeUpdate("insert into DeleteTest(id, name, b) values(3, 'a3', false)");
// stmt.executeUpdate("insert into DeleteTest(id, name, b) values(3, 'b3', true)");
}
}
// 测试org.h2.command.Parser.parseDelete()
// org.h2.command.dml.Delete
@Override
public void startInternal() throws Exception {
create();
// stmt.executeUpdate("drop table IF EXISTS test");
// stmt.executeUpdate("create table test(a int, b int, primary key(a, b))");
// stmt.executeUpdate("create unique index c on test(b, a)");
// stmt.executeUpdate("insert into test values(1, 10), (2, 20)");
// sql = "select * from (select * from test) where a=1 and b in(10, 20)";
// executeQuery();
stmt.executeUpdate("SET OPTIMIZE_REUSE_RESULTS 0");
sql = "delete top 3 from DeleteTest";
sql = "delete top 3 from DeleteTest where name='a1'";
sql = "delete top 3 from DeleteTest where 'a1'>name";
sql = "delete top 3 from DeleteTest where name = null";
sql = "delete top 3 from DeleteTest where name != null";
sql = "delete top 3 from DeleteTest where name > null";
sql = "delete from DeleteTest where name > 'b1'";
sql = "delete from DeleteTest where id>2";
sql = "delete from DeleteTest where 3<2";
// sql = "delete from DeleteTest where b";
// sql = "delete from DeleteTest where 3>2";
// sql = "delete from DeleteTest limit 0"; //limit 0不删除任何行
// sql = "delete from DeleteTest where id>2";
//
// sql = "delete from DeleteTest where id>2 and name='a1'";
sql = "delete from DeleteTest where id=200";
stmt.executeUpdate(sql);
// sql = "delete top 3 from DeleteTest where name > ?";
// ps = conn.prepareStatement(sql);
// ps.setString(1, "b1");
// ps.executeUpdate();
// query();
}
void query() throws Exception {
sql = "select * from DeleteTest";
sql = "select * from DeleteTest where name = 'a1'order by name, id";
sql = "select b, id, name from DeleteTest where name = 'a1'order by name, id";
sql = "select id, name, b from DeleteTest where name = 'a1'order by name, id";
stmt.setFetchSize(10000);
long t1 = 0, t2 = 0;
int count = 10;
for (int i = 0; i < count; i++) {
t1 += executeQuery1();
t2 += executeQuery2();
}
t1 /= count;
t2 /= count;
System.out.println("t1 = " + t1);
System.out.println("t2 = " + t2);
}
long executeQuery1() throws Exception {
sql = "select id, name, b from DeleteTest where name > 'a1' and id>1 order by id";
sql = "select name, id, b from DeleteTest where name > 'a1' and id>1 order by id";
sql = "select name, id, b from DeleteTest where id>1 and name > 'a1' order by id";
// sql = "select b, name, id from DeleteTest where id>1 and name > 'a1' order by id";
// sql = "select id, name, b from DeleteTest where name > 'a1' and id>1 order by id";
long t1 = System.currentTimeMillis();
stmt.executeQuery(sql);
// executeQuery();
long t2 = System.currentTimeMillis();
sql = "EXPLAIN ANALYZE " + sql;
// executeQuery();
// System.out.println();
return (t2 - t1);
}
long executeQuery2() throws Exception {
sql = "select b, name, id from DeleteTest where name > 'a1' and id>1 order by id";
// sql = "select b, id, name from DeleteTest where name > 'a1' and id>1 order by id";
long t1 = System.currentTimeMillis();
stmt.executeQuery(sql);
// executeQuery();
long t2 = System.currentTimeMillis();
sql = "EXPLAIN ANALYZE " + sql;
// executeQuery();
// System.out.println();
return (t2 - t1);
}
}