数据库实现原理#1(Nested Loop Join)

下面使用代码的方式说明,较为简单,请自行阅读.

#include 
#include 
#include 
#define MAX_BYTES 64
int read_int(FILE *file,char *buffer)
{
  fgets(buffer,MAX_BYTES,file);
  return atoi(buffer);
}
void main(int argc,char *argv[])
{
  char * file1 = argv[1];
  char * file2 = argv[2];
  char buffer[MAX_BYTES];
 FILE *fd1 = fopen(file1,"r");  
  if(fd1 == NULL)
  {
    printf("Can not open file %s.\n",file1);
    return;
  }
  FILE *fd2 = fopen(file2,"r");
  if(fd2 == NULL)
  {
    printf("Can not open file %s.\n",file2);
    return;
  }
  for(int i = 1;!feof(fd1);i++)
  {
    int outer = read_int(fd1,buffer);
    for(int j=1;!feof(fd2);j++)
    {
      int inner = read_int(fd2,buffer);
      if(outer == inner)
      {
        printf("Value : %d,outer line : %d,inner line : %d\n",outer,i,j);
      }
    }
    rewind(fd2);
  }
  fclose(fd2);
  fclose(fd1);
}

运行输出:

helloworld@DESKTOP-BRAEUTR /d/work/source/c/join
$ time ./nested.exe a.csv b.csv
Value : 51,outer line : 1,inner line : 25646
Value : 51,outer line : 1,inner line : 35302
Value : 51,outer line : 1,inner line : 39994
Value : 51,outer line : 1,inner line : 69241
Value : 51,outer line : 1,inner line : 69614
Value : 51,outer line : 1,inner line : 72504
Value : 51,outer line : 1,inner line : 72851
Value : 51,outer line : 1,inner line : 78530
Value : 51,outer line : 1,inner line : 88119
......
请使用浏览器的分享功能分享到微信等