2 import java
.util
.Random
;
5 public static Random generator
= new Random();
6 public static int getRandom(int end
)
8 double val
= generator
.nextDouble();
14 public static int singleTuple(Connection con
, boolean flag
)throws Exception
16 PreparedStatement stmt
= null ;
20 String buf
= " SELECT * from big1 where unique2=?; ";
25 String buf
= "SELECT * from big1 where unique2=? ;";
29 stmt
= con
.prepareStatement(stmtStr
);
30 int count
=0, recordCount
=0;
32 long start
=0, end
=0, curr
=0;
37 for(int i
=0; i
<=100; i
++) {
40 start
= System
.nanoTime();
41 rs
= stmt
.executeQuery();
50 end
= System
.nanoTime();
53 System
.out
.println("records in Q7= "+ recordCount
);
63 return (int)tot
/100/1000;
66 public static int onePerSel(Connection con
, boolean flag
) throws Exception
68 PreparedStatement stmt
= null;
69 int searchVal
= getRandom(9999 - 100);
70 int searchValEnd
= searchVal
+ 99;
75 String buf
= "SELECT * from big1 where unique2 between "+
76 searchVal
+ " and "+ searchValEnd
+ ";";
79 String buf
= "SELECT * from big1 where unique1 between "+
80 searchVal
+ " and "+ searchValEnd
+ ";";
83 stmt
= con
.prepareStatement(stmtStr
);
84 int count
=0, recordCount
=0;
86 long start
=0, end
=0, curr
=0;
89 for (int i
=0 ; i
<= 100 ; i
++) {
90 start
= System
.nanoTime();
92 rs
= stmt
.executeQuery();
101 end
= System
.nanoTime();
104 if (recordCount
!= 100)
106 System
.out
.println("No. of records returned is wrond for Q1 "+recordCount
);
116 return (int)tot
/100/1000;
120 public static int aggregate(Connection con
, int val
)throws Exception
122 PreparedStatement stmt
= null;
126 String buf
= "SELECT MIN(unique2) from big1;";
131 String buf
= "SELECT MIN(unique2) FROM big1 GROUP BY onepercent;";
136 String buf
= "SELECT SUM(unique2) FROM big1 GROUP BY onepercent;";
140 stmt
= con
.prepareStatement(stmtStr
);
141 int count
= 0, recordCount
;
143 long start
= 0,end
= 0,curr
= 0;
147 //for(int i=0;i<100;i++){
148 start
= System
.nanoTime();
149 rs
= stmt
.executeQuery();
158 end
= System
.nanoTime();
160 if((val
==1) && recordCount
!=1)
162 System
.out
.println("No. of records returned is around for Q2" + recordCount
);
165 if((val
==2 || val
==3) && recordCount
!=100)
167 System
.out
.println("No. of records returned is around for Q2" + recordCount
);
175 return (int)tot
/1000;
180 public static int dmlstatement(Connection con
, int val
)throws Exception
182 PreparedStatement stmt
= null;
186 String buf
= "insert into big1 values(10010,10000,0,2,0,10,50,688,1950,4950,9950,1,100,'MXXXXXXXXXXXXXXXXXXXXXXXXXGXXXXXXXXXXXXXXXXXXXXXXXXC','GXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXXA','OXXXXXXXXXXXXXXXXXXXXXXXXXOXXXXXXXXXXXXXXXXXXXXXXXXO');";
191 String buf
= "UPDATE big1 SET unique1=10001 WHERE unique1=10010;";
196 String buf
= "DELETE FROM big1 WHERE unique1=10001;";
200 stmt
= con
.prepareStatement(stmtStr
);
201 int count
= 0, recordCount
=0;
203 long start
= 0,end
= 0,curr
= 0;
208 //for(int i=0;i<100;i++){
209 start
= System
.nanoTime();
210 ret
= stmt
.executeUpdate();
215 end
= System
.nanoTime();
217 /*if((val==1) && recordCount !=1)
219 System.out.println("No. of records returned is around for Q2" + recordCount);
222 if((val==2 || val==3) && recordCount !=1)
224 System.out.println("No. of records returned is around for Q2" + recordCount);
232 return (int)tot
/1000;
236 /*public static int joining(Connection con,int val)throws Exception
238 PreparedStatement stmt = null;
242 String buf = "SELECT * FROM big1,big2 WHERE(big1.unique2=big2.unique2) AND (big2.unique2<1000);";
247 String buf = "SELECT * FROM big1,bprime WHERE (big1.unique2=bprime.unique2);";
252 String buf = "SELECT * FROM small,big1 WHERE (small.unique2=big1.unique2) AND(big1.unique2=big2.unique2) AND (big1.unique2<1000);";
257 String buf = "SELECT * FROM big1,big2 WHERE (big1.unique1=big2.unique1) AND (big1.unique2<1000);";
262 String buf = "SELECT * FROM big1,bprime WHERE (big1.unique1=bprime.unique1);";
267 String buf = "SELECT * FROM small,big1 WHERE (small.unique1=big1.unique1) AND (big1.unique1=big2.unique1) AND (big1.unique1 < 1000);";
271 stmt = con.prepareStatement(stmtStr);
272 int count=0,recordCount=0,ret=0;
273 long start=0,end=0,curr=0;
276 for(int i=0;i<=100;i++)
278 start = System.nanoTime();
279 rs = stmt.executeQuery();
286 end=System.nanoTime();
287 if(recordCount!=1000)
289 System.out.println("No. of records returned is around for Q2"+recordCount);
297 return (int)tot/100/1000;
301 /*public static int projection(Connection con, boolean flag)throws Exception
303 PreparedStatement stmt = null;
308 String buf = "SELECT DISTINCT two,four,ten,twenty,onepercent,string4 from big1;";
313 String buf = "SELECT DISTINCT two,four,ten,twenty,onepercent,tenpercent,twentypercent,fiftypercent,unique3,evenonepercent,oddonepercent,stringu1,stringu2,string4 FROM big1;";
316 stmt = con.prepareStatement(stmtStr);
317 int count = 0, recordCount;
319 long start = 0, end = 0, curr = 0;
322 for(int i=0 ; i<=100 ; i++)
324 start = System.nanoTime();
325 rs = stmt.executeQuery();
334 end = System.nanoTime();
336 if((flag && recordCount !=1000) || (!flag && recordCount !=10000))
338 System.out.println("No. of records returned is around for Q2" + recordCount);
349 return (int)tot/100/1000;
353 public static int tenPerSel(Connection con
, boolean flag
)throws Exception
355 PreparedStatement stmt
= null;
356 int searchVal
= getRandom(9999 - 1000);
357 int searchValEnd
= searchVal
+ 999;
362 String buf
= "SELECT * from big1 where unique2 between "+ searchVal
+ " and "+ searchValEnd
+ ";";
367 String buf
= "SELECT * from big1 where unique1 between "+searchVal
+" and "+ searchValEnd
+ ";";
370 stmt
= con
.prepareStatement(stmtStr
);
371 int count
= 0, recordCount
;
373 long start
= 0, end
= 0, curr
= 0;
376 for(int i
=0 ; i
<=100 ; i
++)
378 start
= System
.nanoTime();
379 rs
= stmt
.executeQuery();
388 end
= System
.nanoTime();
391 if(recordCount
!= 1000)
393 System
.out
.println("No. of records returned is around for Q2" + recordCount
);
404 return (int)tot
/100/1000;
408 //*****************************************************
409 public static void main(String
[] args
)
414 Class
.forName("csql.jdbc.JdbcSqlDriver");
415 Connection con
= DriverManager
.getConnection("jdbc:csql", "root", "manager");
416 Statement cStmt
= con
.createStatement();
418 System
.out
.println("\n\n");
419 System
.out
.println("**********************************************************\n");
420 System
.out
.println("NOTE : Idx1-------Non cluster Unique Index(uniquue1).\n\tIdx2-------Cluster Unique Index(unique2).\n\tWall_Clk---");
421 System
.out
.println("\n");
422 System
.out
.println("Q.No.\tQuery Type\tNoIdx\tIdx1\tIdx2\tWall_Clk");
423 System
.out
.println("-----\t----------\t-----\t----\t----\t--------");
426 cStmt
.execute("DROP INDEX idx3");
429 cStmt
.execute("DROP INDEX idx4");// for q1 and q2
433 System
.out
.println("Indexes are already dropped\n");
436 int q1
= onePerSel(con
, true);
437 System
.out
.println("1\t1% Sel\t\tY\t-\t-\t"+q1
);
439 int q2
= tenPerSel(con
,true);
440 System
.out
.println("2\t10% Sel\t\tY\t-\t-\t"+q2
);
444 cStmt
.execute("CREATE INDEX idx4 ON big1(unique2)UNIQUE");
447 int q3
= onePerSel(con
,true);
448 System
.out
.println("3\t1% Sel\t\t-\t-\tY\t"+q3
);
451 int q4
= tenPerSel(con
,true);
452 System
.out
.println("4\t10% Sel\t\t-\t-\tY\t"+q4
);
456 cStmt
.execute("DROP INDEX idx4");
459 cStmt
.execute("CREATE INDEX idx3 ON big1(unique1)UNIQUE");
461 int q5
= onePerSel(con
,false);
462 System
.out
.println("5\t1% Sel\t\t-\tY\t-\t"+q5
);
465 int q6
= tenPerSel(con
,false);
466 System
.out
.println("6\t10% Sel\t\t-\tY\t-\t"+q6
);
468 cStmt
.execute("DROP INDEX idx3");
471 cStmt
.execute("CREATE INDEX idx4 ON big1(unique2)UNIQUE");
474 int q7
= singleTuple(con
,true);
475 System
.out
.println("7\t1 Tup Sel\t-\t-\tY\t"+q7
);
478 //commented query 8 as it is duplicate of query 3
479 int q8
= onePerSel(con
,true);
480 System
.out
.println("8\t1% Sel\t\t-\t-\tY\t"+q1
);
483 /* cStmt.execute("DROP INDEX idx4");
486 cStmt.execute("DROP INDEX idx1");
489 cStmt.execute("DROP INDEX idx2");
492 cStmt.execute("DROP INDEX idx5");
495 cStmt.execute("DROP INDEX idx6");
499 int Q9=1,Q10=2,Q11=3,Q15=4,Q16=5,Q17=6;
501 int q9 = joining(con, Q9);
502 System.out.println("9\tJoin AselB\tY\t-\t-\t"+q9);
504 int q10 = joining(con,Q10);
505 System.out.println("10\tJoin ABPrime\tY\t-\t-\t"+q10);
507 int q11 = joining(con,Q11);
508 System.out.println("11\tJoin CselAselB\tY\t-\t-\t"+q11);
510 // create non-cluster index
511 cStmt.execute("CREATE INDEX idx1 ON small(unique1)UNIQUE");
514 cStmt.execute("CREATE INDEX idx3 ON big1(unique1)UNIQUE");
517 cStmt.execute("CREATE INDEX idx5 ON big2(unique1)UNIQUE");
520 int q15 = joining(con,Q15);
521 System.out.println("15\tJoin AselB\t-\tY\t-\t"+q15);
523 int q16 = joining(con,Q16);
524 System.out.println("16\tJoinABprime\t-\tY\t-\t"+q16);
526 int q17 = joining(con,Q17);
527 System.out.println("17\tJoin CselAselB\t-\tY\t-\t"+q17);
529 // create index for projection
530 cStmt.execute("CREATE INDEX idx2 ON small(unique2)UNIQUE");
533 cStmt.execute("CREATE INDEX idx4 ON big1(unique2)UNIQUE");
536 cStmt.execute("CREATE INDEX idx6 ON big2(unique2)UNIQUE");
539 int q18 = projection(con,true);
540 System.out.println("18\t1%Proj Sel\t-\tY\tY\t"+q18);
542 int q19 = projection(con,false);
543 System.out.println("19\t100%Proj Sel\t-\tY\tY\t"+q19);*/
546 // aggregate function
547 //cStmt.execute("DROP INDEX idx3");
550 cStmt
.execute("DROP INDEX idx4");
554 int min
=1, ming
=2,sum
=3;// function parameter
556 int q20
= aggregate(con
,min
);
557 System
.out
.println("20\tMinAgg No Grps\tY\t-\t-\t"+q20
);
559 int q21
= aggregate(con
,ming
);
560 System
.out
.println("21\tMinAgg Grps\tY\t-\t-\t"+q21
);
563 int q22
= aggregate(con
,sum
);
564 System
.out
.println("22\tSumAgg Grps\tY\t-\t-\t"+q22
);
566 //cStmt.execute("CREATE INDEX idx3 ON big1(unique1)UNIQUE");
569 cStmt
.execute("CREATE INDEX idx4 ON big1(unique2)UNIQUE"); // create index agaig
572 int q23
= aggregate(con
,min
);
573 System
.out
.println("23\tMinAgg No Grps\t-\t-\tY\t"+q23
);
576 int q24
= aggregate(con
,ming
);
577 System
.out
.println("24\tMinAgg Grps\t-\t-\tY\t"+q24
);
580 int q25
= aggregate(con
,sum
);
581 System
.out
.println("25\tSumAgg Grps\t-\t-\tY\t"+q25
);
585 //cStmt.execute("DROP INDEX idx3");
588 cStmt
.execute("DROP INDEX idx4");
592 int in
=1,upd
=2,del
=3;// function parameter
594 int q26
= dmlstatement(con
,in
);
595 System
.out
.println("26\tInsert 1 Tup\tY\t-\t-\t"+q26
);
598 int q27
= dmlstatement(con
,upd
);
599 System
.out
.println("27\tupdate 1 Tup\tY\t-\t-\t"+q27
);
602 int q28
= dmlstatement(con
,del
);
603 System
.out
.println("28\tdelete 1 Tup\tY\t-\t-\t"+q28
);
606 // create index again for dml statement
607 cStmt
.execute("CREATE INDEX idx3 ON big1(unique1)UNIQUE;");
610 cStmt
.execute("CREATE INDEX idx4 ON big1(unique2)UNIQUE;");
614 int q29
= dmlstatement(con
,in
);
615 System
.out
.println("29\tinsert 1 Tup\t-\tY\tY\t"+q29
);
618 int q30
= dmlstatement(con
,upd
);
619 System
.out
.println("30\tupdate 1 Tup\t-\tY\tY\t"+q30
);
622 int q31
= dmlstatement(con
,del
);
623 System
.out
.println("31\tdelete 1 Tup\t-\tY\tY\t"+q31
);
625 System
.out
.println("\n");
627 System
.out
.println("**********************************************************\n");
635 System
.out
.println("Exception in Test: "+e
);