ANALYZE for MERGE
This commit is contained in:
parent
b42eff16cb
commit
94cb1daa52
@ -51,6 +51,7 @@ typedef struct st_mymerge_info /* Struct from h_info */
|
|||||||
uint reclength; /* Recordlength */
|
uint reclength; /* Recordlength */
|
||||||
int errkey; /* With key was dupplicated on err */
|
int errkey; /* With key was dupplicated on err */
|
||||||
uint options; /* HA_OPTION_... used */
|
uint options; /* HA_OPTION_... used */
|
||||||
|
ulong *rec_per_key; /* for sql optimizing */
|
||||||
} MYMERGE_INFO;
|
} MYMERGE_INFO;
|
||||||
|
|
||||||
typedef struct st_myrg_table_info
|
typedef struct st_myrg_table_info
|
||||||
@ -71,6 +72,7 @@ typedef struct st_myrg_info
|
|||||||
my_bool cache_in_use;
|
my_bool cache_in_use;
|
||||||
LIST open_list;
|
LIST open_list;
|
||||||
QUEUE by_key;
|
QUEUE by_key;
|
||||||
|
ulong *rec_per_key_part; /* for sql optimizing */
|
||||||
} MYRG_INFO;
|
} MYRG_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,8 +28,6 @@ ulonglong myrg_position(MYRG_INFO *info)
|
|||||||
~(ulonglong) 0;
|
~(ulonglong) 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If flag != 0 one only gets pos of last record */
|
|
||||||
|
|
||||||
int myrg_status(MYRG_INFO *info,register MYMERGE_INFO *x,int flag)
|
int myrg_status(MYRG_INFO *info,register MYMERGE_INFO *x,int flag)
|
||||||
{
|
{
|
||||||
MYRG_TABLE *current_table;
|
MYRG_TABLE *current_table;
|
||||||
@ -55,15 +53,16 @@ int myrg_status(MYRG_INFO *info,register MYMERGE_INFO *x,int flag)
|
|||||||
DBUG_PRINT("info2",("table: %s, offset: %lu",
|
DBUG_PRINT("info2",("table: %s, offset: %lu",
|
||||||
file->table->filename,(ulong) file->file_offset));
|
file->table->filename,(ulong) file->file_offset));
|
||||||
}
|
}
|
||||||
x->records = info->records;
|
x->records= info->records;
|
||||||
x->deleted = info->del;
|
x->deleted= info->del;
|
||||||
x->data_file_length = info->data_file_length;
|
x->data_file_length= info->data_file_length;
|
||||||
x->reclength = info->reclength;
|
x->reclength= info->reclength;
|
||||||
x->options = info->options;
|
x->options= info->options;
|
||||||
if (current_table)
|
if (current_table)
|
||||||
x->errkey = current_table->table->errkey;
|
x->errkey= current_table->table->errkey;
|
||||||
else
|
else
|
||||||
x->errkey=0;
|
x->errkey= 0;
|
||||||
|
x->rec_per_key = info->rec_per_key_part;
|
||||||
}
|
}
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
@ -32,8 +32,8 @@
|
|||||||
|
|
||||||
MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
||||||
{
|
{
|
||||||
int save_errno,i,errpos;
|
int save_errno,i,j,errpos;
|
||||||
uint files,dir_length,length,options;
|
uint files,dir_length,length,options, key_parts;
|
||||||
ulonglong file_offset;
|
ulonglong file_offset;
|
||||||
char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end;
|
char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end;
|
||||||
MYRG_INFO info,*m_info;
|
MYRG_INFO info,*m_info;
|
||||||
@ -89,13 +89,25 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
}
|
}
|
||||||
info.reclength=isam->s->base.reclength;
|
info.reclength=isam->s->base.reclength;
|
||||||
}
|
}
|
||||||
|
key_parts=(isam ? isam->s->base.key_parts : 0);
|
||||||
if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO)+
|
if (!(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO)+
|
||||||
files*sizeof(MYRG_TABLE),
|
files*sizeof(MYRG_TABLE)+
|
||||||
|
sizeof(long)*key_parts,
|
||||||
MYF(MY_WME))))
|
MYF(MY_WME))))
|
||||||
goto err;
|
goto err;
|
||||||
*m_info=info;
|
*m_info=info;
|
||||||
m_info->open_tables=(files) ? (MYRG_TABLE *) (m_info+1) : 0;
|
|
||||||
m_info->tables=files;
|
m_info->tables=files;
|
||||||
|
if (files)
|
||||||
|
{
|
||||||
|
m_info->open_tables=(MYRG_TABLE *) (m_info+1);
|
||||||
|
m_info->rec_per_key_part=(ulong *) (m_info->open_tables+files);
|
||||||
|
bzero((char*) m_info->rec_per_key_part,sizeof(long)*key_parts);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_info->open_tables=0;
|
||||||
|
m_info->rec_per_key_part=0;
|
||||||
|
}
|
||||||
errpos=2;
|
errpos=2;
|
||||||
|
|
||||||
options= (uint) ~0;
|
options= (uint) ~0;
|
||||||
@ -107,6 +119,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
m_info->records+=isam->state->records;
|
m_info->records+=isam->state->records;
|
||||||
m_info->del+=isam->state->del;
|
m_info->del+=isam->state->del;
|
||||||
m_info->data_file_length+=isam->state->data_file_length;
|
m_info->data_file_length+=isam->state->data_file_length;
|
||||||
|
for (j=0; j < key_parts; j++)
|
||||||
|
m_info->rec_per_key_part[j]+=isam->s->state.rec_per_key_part[j] / files;
|
||||||
if (i)
|
if (i)
|
||||||
isam=(MI_INFO*) (isam->open_list.next->data);
|
isam=(MI_INFO*) (isam->open_list.next->data);
|
||||||
}
|
}
|
||||||
|
@ -229,6 +229,13 @@ void ha_myisammrg::info(uint flag)
|
|||||||
#else
|
#else
|
||||||
ref_length=4; // Can't be > than my_off_t
|
ref_length=4; // Can't be > than my_off_t
|
||||||
#endif
|
#endif
|
||||||
|
if (flag & HA_STATUS_CONST)
|
||||||
|
{
|
||||||
|
if (table->key_parts)
|
||||||
|
memcpy((char*) table->key_info[0].rec_per_key,
|
||||||
|
(char*) info.rec_per_key,
|
||||||
|
sizeof(table->key_info[0].rec_per_key)*table->key_parts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user