> OK, the alternative to record lookups is to store the transaction id in 
> index.  This would require an index insertion for all indexes defined on 
> a table even if the key value didn't change.  It would also require a 
> corresponding index deletion for each index defined on the table when a 
> record version was garbage collected.  The update performance would go 
> straight down the toilet.  And this doesn't include the performance drop 
> due to fluffed up indexes.
> 
> If you have a third alternative, by all means share it.

    Mark every index key with two tx numbers: 
- first, mandatory - is the number of tx that inserts this key (insert, update 
when key was changed), 
- second, optional - is the number of tx that deletes this index key (delete, 
update when key was changed).

- inserts will cost the same as now,
- updates will 
    - if key was not changed - same cost as now (zero)
    - if key was changed - twice cost as now (mark old key with current tx 
number, insert new key)
- delete will have additional cost to mark old key with current tx number
- undo of update and delete must additionally clear the mark for the old key 
- index keys will be more wide than now, there is some tricks to reduce new 
index keys length
- garbage collection will be the main winner - there is no need to process 
indices at the same time
  as table records. It allows to process every index independent from table and 
almost completely 
  eliminates random IO when records are removed. Currently, when table have 
more than 5-6 indices,
  garbage collection is terrible slow because of random IO.
- selects will have no need to read record version to evaluate record visibility
- also it allows to have index coverage (also requires to use such index key 
encoding which allows 
  to recover original value from index key)

Regards,
Vlad

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get 
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to