Just wanted to add to what @treeform mentioned, key distribution matters a lot 
when deleting with tables. Check out the timings of sequential keys vs a more 
distributed table access.
    
    
    import tables, times, random, sugar
    
    template bench(code: untyped) =
      let t1 = cpuTime()
      code
      let t2 = cpuTime()
      echo "Line ", instantiationInfo().line, " took ", t2 - t1
    
    var t: Table[int, int]
    const tests = 100_000
    
    bench:
      for i in 0 ..< tests:
        t.add i, 1
    
    bench:
      for i in 0 ..< tests:
        t.del i
    
    let randomKeys = collect(newSeqOfCap(tests)):
      for i in 0 ..< tests:
        rand int.high
    
    bench:
      for i in 0 ..< tests:
        t[randomKeys[i]] = 1
    
    bench:
      for i in 0 ..< tests:
        t.del randomKeys[i]
    
    
    Run

I get the following output with -d:danger -d:release:

  * Line 12 took 0.003
  * Line 16 took 7.209
  * Line 24 took 0.00199999999999978
  * Line 28 took 0.003000000000000114



In this example, deleting with sequential keys is 2400 times slower than keys 
with a more random distribution.

Reply via email to