Hello everyone.
I've discover performance degradation due to update 3.3.17 -> 3.5.4.
This SQL query work very slowly:

    DELETE FROM
      population_stamp
    WHERE
      town_id IN (
        SELECT DISTINCT town_id FROM population_stamp
        EXCEPT
        SELECT id FROM town
      );

Some info about tables:

                CREATE TABLE population_stamp(
                        population int,
                        town_id int,
                        stamp_id int
                );
                CREATE INDEX popstamp_idx on population_stamp(stamp_id, 
town_id);


                CREATE TABLE town(
                        id int PRIMARY KEY,
                        lochash int,
                        x int, y int,
                        name char(32),
                        player_id int,
                        population int
                );
                CREATE INDEX town_xy ON town(x,y);
                CREATE INDEX town_uid ON town(player_id);
                CREATE INDEX town_name ON town(name);

Explain from 3.5.4:
sqlite> explain
   ...>     DELETE FROM
   ...>       population_stamp
   ...>     WHERE
   ...>       town_id IN (
   ...>         SELECT DISTINCT town_id FROM population_stamp
   ...>         EXCEPT
   ...>         SELECT id FROM town
   ...>       );
addr  opcode          p1          p2          p3
----  --------------  ----------  ----------  ---------------------------------
0     Goto            0           104
1     Integer         0           0
2     OpenRead        0           18
3     SetNumColumns   0           2
4     Rewind          0           85
5     StackDepth      -1          0
6     MemLoad         0           0
7     If              0           72
8     MemInt          1           0
9     OpenEphemeral   4           0           keyinfo(1,BINARY)
10    SetNumColumns   4           1
11    OpenEphemeral   5           1           keyinfo(1,BINARY)
12    OpenEphemeral   6           2           keyinfo(1,BINARY)
13    MemInt          0           3
14    MemInt          0           2
15    Goto            0           26
16    MemInt          1           3
17    Return          0           0
18    IfMemPos        2           20
19    Return          0           0
20    MemLoad         1           0
21    MakeRecord      1           0
22    IdxInsert       5           0
23    Return          0           0
24    MemNull         1           0
25    Return          0           0
26    Gosub           0           24
27    Integer         0           0
28    OpenRead        2           18
29    SetNumColumns   2           2
30    Rewind          2           37
31    StackDepth      -1          0
32    Column          2           1
33    Sequence        6           0
34    MakeRecord      2           0
35    IdxInsert       6           0
36    Next            2           31
37    Close           2           0
38    Sort            6           52
39    Column          6           0
40    MemStore        5           0
41    MemLoad         4           0
42    Eq              512         47          collseq(BINARY)
43    MemMove         4           5
44    Gosub           0           18
45    IfMemPos        3           52
46    Gosub           0           24
47    Column          6           0
48    MemStore        1           1
49    MemInt          1           2
50    Next            6           39
51    Gosub           0           18
52    Integer         0           0
53    OpenRead        1           8
54    SetNumColumns   1           1
55    Rewind          1           62
56    StackDepth      -1          0
57    Column          1           0
58    MakeRecord      1           0
59    NotFound        5           61
60    Delete          5           0
61    Next            1           56
62    Close           1           0
63    Rewind          5           71
64    Column          5           0
65    NotNull         -1          68
66    Pop             1           0
67    Goto            0           70
68    MakeRecord      1           0           c
69    IdxInsert       4           0
70    Next            5           64
71    Close           5           0
72    Integer         1           0
73    Column          0           1
74    NotNull         -1          78
75    Pop             2           0
76    Null            0           0
77    Goto            0           81
78    MakeRecord      1           0           c
79    Found           4           81
80    AddImm          -1          0
81    IfNot           1           84
82    Rowid           0           0
83    FifoWrite       0           0
84    Next            0           5
85    Close           0           0
86    Integer         0           0
87    OpenWrite       0           18
88    SetNumColumns   0           3
89    Integer         0           0
90    OpenWrite       1           19          keyinfo(2,BINARY,BINARY)
91    FifoRead        0           101
92    StackDepth      -1          0
93    NotExists       0           100
94    Rowid           0           0
95    Column          0           2
96    Column          0           1
97    MakeIdxRec      2           0           dd
98    IdxDelete       1           0
99    Delete          0           1           population_stamp
100   Goto            0           91
101   Close           1           19
102   Close           0           0
103   Halt            0           0
104   Transaction     0           1
105   VerifyCookie    0           151
106   TableLock       -1          18          population_stamp
107   TableLock       0           8           town
108   Goto            0           1
109   Noop            0           0


Explain from 3.3.17
0|Goto|0|76|
1|Integer|0|0|
2|OpenRead|0|18|
3|SetNumColumns|0|2|
4|Rewind|0|58|
5|MemLoad|0|0|
6|If|0|45|
7|MemInt|1|0|
8|OpenEphemeral|3|0|keyinfo(1,BINARY)
9|SetNumColumns|3|1|
10|OpenEphemeral|4|1|keyinfo(1,BINARY)
11|OpenEphemeral|5|0|keyinfo(1,BINARY)
12|Integer|0|0|
13|OpenRead|2|18|
14|SetNumColumns|2|2|
15|Rewind|2|25|
16|Column|2|1|
17|MakeRecord|-1|0|
18|Distinct|5|21|
19|Pop|2|0|
20|Goto|0|24|
21|IdxInsert|5|0|
22|MakeRecord|1|0|
23|IdxInsert|4|0|
24|Next|2|16|
25|Close|2|0|
26|Integer|0|0|
27|OpenRead|1|8|
28|SetNumColumns|1|1|
29|Rewind|1|35|
30|Column|1|0|
31|MakeRecord|1|0|
32|NotFound|4|34|
33|Delete|4|0|
34|Next|1|30|
35|Close|1|0|
36|Rewind|4|44|
37|Column|4|0|
38|NotNull|-1|41|
39|Pop|1|0|
40|Goto|0|43|
41|MakeRecord|1|0|c
42|IdxInsert|3|0|
43|Next|4|37|
44|Close|4|0|
45|Integer|1|0|
46|Column|0|1|
47|NotNull|-1|51|
48|Pop|2|0|
49|Null|0|0|
50|Goto|0|54|
51|MakeRecord|1|0|c
52|Found|3|54|
53|AddImm|-1|0|
54|IfNot|1|57|
55|Rowid|0|0|
56|FifoWrite|0|0|
57|Next|0|5|
58|Close|0|0|
59|Integer|0|0|
60|OpenWrite|0|18|
61|SetNumColumns|0|3|
62|Integer|0|0|
63|OpenWrite|1|19|keyinfo(2,BINARY,BINARY)
64|FifoRead|0|73|
65|NotExists|0|72|
66|Rowid|0|0|
67|Column|0|2|
68|Column|0|1|
69|MakeIdxRec|2|0|dd
70|IdxDelete|1|0|
71|Delete|0|1|population_stamp
72|Goto|0|64|
73|Close|1|19|
74|Close|0|0|
75|Halt|0|0|
76|Transaction|0|1|
77|VerifyCookie|0|281|
78|Goto|0|1|
79|Noop|0|0|

-- 
Alexander Batyrshin aka bash
bash = Biomechanica Artificial Sabotage Humanoid

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to