  We study the dynamic query evaluation problem: Given a join query Q and a
sequence of updates, we would like to construct a data structure that supports
constant-delay enumeration of the query output after each update.
  We show that a sequence of N insert-only updates (to an initially empty
database) can be executed in total time O(N^{w(Q)}), where w(Q) is the
fractional hypertree width of Q. This matches the complexity of the static
query evaluation problem for Q and a database of size N. One corollary is that
the average time per single-tuple insert is constant for acyclic joins.
  In contrast, we show that a sequence of N insert-and-delete updates to Q can
be executed in total time O(N^{w(Q')}), where Q' is obtained from Q by
extending every relational atom with extra variables that represent the
"lifespans" of tuples in Q. We show that this reduction is optimal in the sense
that the static evaluation runtime of Q' provides a lower bound on the total
update time of Q. Our approach recovers the optimal single-tuple update time
for known queries such as the hierarchical and Loomis-Whitney join queries.
