perftest.pgc
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #include <stdio.h>
  2. #include <sys/time.h>
  3. #include <unistd.h>
  4. exec sql include sqlca;
  5. exec sql whenever sqlerror sqlprint;
  6. exec sql whenever not found sqlprint;
  7. static void
  8. print_result(long sec, long usec, char *text)
  9. {
  10. if (usec < 0)
  11. {
  12. sec--;
  13. usec+=1000000;
  14. }
  15. printf("I needed %ld seconds and %ld microseconds for the %s test.n", sec, usec, text);
  16. exec sql vacuum;
  17. sleep(1);
  18. }
  19. int
  20. main ()
  21. {
  22. exec sql begin declare section;
  23. long i;
  24. exec sql end declare section;
  25. struct timeval tvs, tve;
  26. exec sql connect to mm;
  27. exec sql create table perftest1(number int4, ascii char(16));
  28. exec sql create unique index number1 on perftest1(number);
  29. exec sql create table perftest2(number int4, next_number int4);
  30. exec sql create unique index number2 on perftest2(number);
  31. gettimeofday(&tvs, NULL);
  32. for (i = 0;i < 1407; i++)
  33. {
  34. exec sql begin declare section;
  35. char text[16];
  36. exec sql end declare section;
  37. sprintf(text, "%ld", i);
  38. exec sql insert into perftest1(number, ascii) values (:i, :text);
  39. exec sql insert into perftest2(number, next_number) values (:i, :i+1);
  40. exec sql commit;
  41. }
  42. gettimeofday(&tve, NULL);
  43. print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "insert");
  44. gettimeofday(&tvs, NULL);
  45. for (i = 0;i < 1407; i++)
  46. {
  47. exec sql begin declare section;
  48. char text[16];
  49. exec sql end declare section;
  50. exec sql select ascii into :text from perftest1 where number = :i;
  51. exec sql commit;
  52. }
  53. gettimeofday(&tve, NULL);
  54. print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "selection&projection");
  55. gettimeofday(&tvs, NULL);
  56. for (i = 0;i < 1407; i++)
  57. {
  58. exec sql begin declare section;
  59. char text[16];
  60. exec sql end declare section;
  61. exec sql select perftest1.ascii into :text from perftest1, perftest2 where perftest1.number = perftest2.number and perftest2.number = :i;
  62. exec sql commit;
  63. }
  64. gettimeofday(&tve, NULL);
  65. print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "join");
  66. gettimeofday(&tvs, NULL);
  67. exec sql update perftest2 set next_number = next_number + 1;
  68. exec sql commit;
  69. gettimeofday(&tve, NULL);
  70. print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "update");
  71. gettimeofday(&tvs, NULL);
  72. exec sql delete from perftest2;
  73. exec sql commit;
  74. gettimeofday(&tve, NULL);
  75. print_result(tve.tv_sec - tvs.tv_sec, tve.tv_usec - tvs.tv_usec, "delete");
  76. exec sql drop index number2;
  77. exec sql drop table perftest2;
  78. exec sql drop index number1;
  79. exec sql drop table perftest1;
  80. exec sql commit;
  81. exec sql disconnect;
  82. return (0);
  83. }