144 lines
2.7 KiB
Plaintext
144 lines
2.7 KiB
Plaintext
#include <stdio.h>
|
|
#include <sys/time.h>
|
|
#include <unistd.h>
|
|
|
|
exec sql include sqlca;
|
|
|
|
exec sql whenever sqlerror sqlprint;
|
|
exec sql whenever not found sqlprint;
|
|
|
|
static void
|
|
print_result(long sec, long usec, char *text)
|
|
{
|
|
if (usec < 0)
|
|
{
|
|
sec--;
|
|
usec+=1000000;
|
|
}
|
|
printf("I needed %ld seconds and %ld microseconds for the %s test.\n", sec, usec, text);
|
|
exec sql vacuum;
|
|
sleep(1);
|
|
}
|
|
|
|
int
|
|
main ()
|
|
{
|
|
exec sql begin declare section;
|
|
long i;
|
|
exec sql end declare section;
|
|
struct timeval tvs, tve;
|
|
|
|
exec sql connect to mm;
|
|
|
|
exec sql create table perftest1(number int4, ascii char(16));
|
|
|
|
exec sql create unique index number1 on perftest1(number);
|
|
|
|
exec sql create table perftest2(number int4, next_number int4);
|
|
|
|
exec sql create unique index number2 on perftest2(number);
|
|
|
|
exec sql commit;
|
|
|
|
exec sql set autocommit to on;
|
|
|
|
exec sql begin transaction;
|
|
|
|
gettimeofday(&tvs, NULL);
|
|
|
|
for (i = 0;i < 1407; i++)
|
|
{
|
|
exec sql begin declare section;
|
|
char text[16];
|
|
exec sql end declare section;
|
|
|
|
sprintf(text, "%ld", i);
|
|
exec sql insert into perftest1(number, ascii) values (:i, :text);
|
|
exec sql insert into perftest2(number, next_number) values (:i, :i+1);
|
|
}
|
|
|
|
exec sql commit;
|
|
|
|
gettimeofday(&tve, NULL);
|
|
|
|
print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "insert");
|
|
|
|
exec sql begin transaction;
|
|
|
|
gettimeofday(&tvs, NULL);
|
|
|
|
for (i = 0;i < 1407; i++)
|
|
{
|
|
exec sql begin declare section;
|
|
char text[16];
|
|
exec sql end declare section;
|
|
|
|
exec sql select ascii into :text from perftest1 where number = :i;
|
|
}
|
|
|
|
exec sql commit;
|
|
|
|
gettimeofday(&tve, NULL);
|
|
|
|
print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "selection&projection");
|
|
|
|
exec sql begin transaction;
|
|
|
|
gettimeofday(&tvs, NULL);
|
|
|
|
for (i = 0;i < 1407; i++)
|
|
{
|
|
exec sql begin declare section;
|
|
char text[16];
|
|
exec sql end declare section;
|
|
|
|
exec sql select perftest1.ascii into :text from perftest1, perftest2 where perftest1.number = perftest2.number and perftest2.number = :i;
|
|
}
|
|
|
|
exec sql commit;
|
|
|
|
gettimeofday(&tve, NULL);
|
|
|
|
print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");
|
|
|
|
exec sql begin transaction;
|
|
|
|
gettimeofday(&tvs, NULL);
|
|
|
|
exec sql update perftest2 set next_number = next_number + 1;
|
|
|
|
exec sql commit;
|
|
|
|
gettimeofday(&tve, NULL);
|
|
|
|
print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "update");
|
|
|
|
exec sql begin transaction;
|
|
|
|
gettimeofday(&tvs, NULL);
|
|
|
|
exec sql delete from perftest2;
|
|
|
|
exec sql commit;
|
|
|
|
gettimeofday(&tve, NULL);
|
|
|
|
print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "delete");
|
|
|
|
exec sql set autocommit = off;
|
|
|
|
exec sql drop index number2;
|
|
|
|
exec sql drop table perftest2;
|
|
|
|
exec sql drop index number1;
|
|
|
|
exec sql drop table perftest1;
|
|
|
|
exec sql commit;
|
|
|
|
exec sql disconnect;
|
|
|
|
return (0);
|
|
}
|