[Tarantool-patches] [PATCH v2 1/1] sql: do not change order of inserted values

Mergen Imeev imeevma at tarantool.org
Fri Apr 10 12:49:24 MSK 2020


Hi! Thank you for review. My answers below.

On Mon, Apr 06, 2020 at 11:42:39PM +0200, Vladislav Shpilevoy wrote:
> Hi! Thanks for the patch!
> 
> See 2 questions below.
> 
> > diff --git a/src/box/sql.c b/src/box/sql.c
> > index 27089bd..7c1eba2 100644
> > --- a/src/box/sql.c
> > +++ b/src/box/sql.c
> > @@ -324,10 +324,17 @@ struct space *
> >  sql_ephemeral_space_create(uint32_t field_count, struct sql_key_info *key_info)
> >  {
> >  	struct key_def *def = NULL;
> > +	uint32_t part_count = field_count;
> >  	if (key_info != NULL) {
> >  		def = sql_key_info_to_key_def(key_info);
> >  		if (def == NULL)
> >  			return NULL;
> > +		/*
> > +		 * In case is_pk_rowid is true we can use rowid
> > +		 * as the only part of the key.
> > +		 */
> > +		if (key_info->is_pk_rowid)
> > +			part_count = 1;
> 
> 1. On one hand this can really speed up ephemeral space comparators,
> because we have special templates for single indexed unsigned field
> if it is in 1, 2, or 3 column.
> 
> On the other hand this won't help, because rowid is the last column
> somewhy. And these fast comparators won't help.
> 
> Can we make rowid first column?
> 
I think we can, but that sould be quite confusing since not
all ephemeral spaces have rowid. I am not sure that we
really need this.

> >  	}
> >  
> >  	struct region *region = &fiber()->gc;
> > @@ -364,17 +371,20 @@ sql_ephemeral_space_create(uint32_t field_count, struct sql_key_info *key_info)
> >  		}
> >  	}
> >  
> > -	for (uint32_t i = 0; i < field_count; ++i) {
> > +	for (uint32_t i = 0; i < part_count; ++i) {
> >  		struct key_part_def *part = &parts[i];
> > -		part->fieldno = i;
> > +		uint32_t j = i;
> > +		if (key_info != NULL && key_info->is_pk_rowid)
> > +			j = field_count - 1;
> 
> 2. Does it make sense to use part count > 1, if we have rowid?
> It is unique anyway.
True, but not all ephemeral spaces have rowid, so we cannot
do this all the time. Still, we can do this in all cases an
ephemeral space have rowid. This may affect performance.
Should I do it in this patch? Or may I just create an issue
on github?



More information about the Tarantool-patches mailing list