On 2015-04-13 09:49 AM, Jeff Roux wrote:
> Hi everyone,
>
> I have copied the original database on my personnal website in a tbz
> archive here :
>
> http://nice-waterpolo.com/misc/db/
>
> There is only one index on timestamp,protocol.

Hi Jeff,

I am not sure what is wrong your side, but the table as I downloaded it 
produced the said query (including all rows) in just over 2 seconds for 
me - that's from a spinning disk.

Good news is I found some improvements. I've included the schema in the 
script below to see I'm not cheating - I dropped the index and made only 
1 index on timestamp - and then for the large query made it ignore the 
index so it was faster through a table scan (but this changes when you 
constrain the selection to a subset, as the last two queries in the 
output show).

Your Query runs on the full set in sub 1-second times with this setup.

This ran in Windows in SQLitespeed while the GUI was up, so if I pushed 
it through the sqlite3.exe command-line shell, another few milliseconds 
would be shaved off.

After the output below I list the pragma settings too in case they 
differ from your setup. I'm hoping the answer presents itself among all 
this. (and I hope the e-mail word-wrapping doesn't mess it up too much).


   -- Processing SQL in: D:\Documents\SQLiteAutoScript.sql
   -- Script Items: 9          Parameter Count: 0
   -- 2015-04-13 14:31:53.280  |  [Info]       Script Initialized, 
Started executing...
   -- 
================================================================================================

SELECT sqlite_version() AS Ver;

   -- Ver
   -- -------
   -- 3.8.9


SELECT * FROM sqlite_master;

   -- type    | name                  | tbl_name       | rootpage   | sql
   -- ------- | --------------------- | -------------- | ------------ | 
------------------------------------------------------------
   -- table   | flows                 | flows |       2      | CREATE 
TABLE flows (idx INTEGER PRIMARY KEY, ipLan INTEGER,
   --         |                       | |              | ipWan INTEGER, 
flags INTEGER, portLan INTEGER, portWan
   --         |                       | |              | INTEGER, tos 
INTEGER, protocol INTEGER, wanTcpFlags
   --         |                       | |              | INTEGER, 
nbBytesDecompOut INTEGER, nbBytesCompIn INTEGER,
   --         |                       | |              | duration 
INTEGER, applId INTEGER, CST INTEGER, SRT INTEGER,
   --         |                       | |              | RTT INTEGER, 
lan_retransmission INTEGER, wan_retransmission
   --         |                       | |              | INTEGER, 
nbPktDecompIn INTEGER, nbPktCompOut INTEGER,
   --         |                       | |              | nbBytesDecompIn 
INTEGER, nbBytesCompOut INTEGER, timestamp
   --         |                       | |              | INTEGER, 
rtpTypeLAN INTEGER, rtpPktsLossLAN INTEGER,
   --         |                       | |              | rtpJitterLAN 
INTEGER, rtpFactorRLAN INTEGER, rtpTypeWAN
   --         |                       | |              | INTEGER, 
rtpPktsLossWAN INTEGER, rtpJitterWAN INTEGER,
   --         |                       | |              | rtpFactorWLAN 
INTEGER, nbBytesDbcDecompOut INTEGER,
   --         |                       | |              | 
nbBytesDbcCompIn INTEGER, nbBytesDefDecompOut INTEGER,
   --         |                       | |              | 
nbBytesDefCompIn INTEGER, nbPktDecompOut INTEGER,
   --         |                       | |              | nbPktCompIn 
INTEGER, nbBytesDbcDecompIn INTEGER,
   --         |                       | |              | 
nbBytesDbcCompOut INTEGER, nbBytesDefDecompIn INTEGER,
   --         |                       | |              | 
nbBytesDefCompOut INTEGER)
   -- table   | application           | application |       4      | 
CREATE TABLE application (id INTEGER CONSTRAINT applpk
   --         |                       | |              | PRIMARY KEY, 
shortname VARCHAR(64), name VARCHAR(256))
   -- table   | sqlite_stat1          | sqlite_stat1 |       6      | 
CREATE TABLE sqlite_stat1(tbl,idx,stat)
   -- index   | Idx_flows_timestamp   | flows |       7      | CREATE 
INDEX Idx_flows_timestamp ON flows (timestamp)


SELECT * FROM sqlite_stat1;

   -- tbl           | idx                   | stat
   -- ------------- | --------------------- | ---------------
   -- application   |                       | 108
   -- flows         | Idx_flows_timestamp   |     1000000 992

-- All-rows Query using the Index
EXPLAIN QUERY PLAN
SELECT SUM(nbBytesDecompOut+nbBytesCompIn) as vol, portLan as item
   FROM flows
  WHERE timestamp BETWEEN 1383770600 AND 1384770600 AND protocol IN (17, 6)
  GROUP BY portLan
  ORDER BY vol DESC LIMIT 6;

   -- selectid | order | from | detail
   -- -------- | ----- | ---- | 
------------------------------------------------------------
   --     0    |   0   |   0  | SEARCH TABLE flows USING INDEX 
Idx_flows_timestamp
   --          |       |      | (timestamp>? AND timestamp<?)
   --     0    |   0   |   0  | USE TEMP B-TREE FOR GROUP BY
   --     0    |   0   |   0  | USE TEMP B-TREE FOR ORDER BY


SELECT SUM(nbBytesDecompOut+nbBytesCompIn) as vol, portLan as item
   FROM flows
  WHERE timestamp BETWEEN 1383770600 AND 1384770600 AND protocol IN (17, 6)
  GROUP BY portLan
  ORDER BY vol DESC LIMIT 6;

   --      vol     |     item
   -- ------------ | ------------
   --  2783898050  |     33722
   --  1374153827  |     33736
   --   886842830  |     39155
   --   655809252  |     51800
   --   363040479  |     53153
   --   358988337  |     59757

   --    Item Stats:  Item No:           5             Query Size 
(Chars):  206
   --                 Result Columns:    2 Result Rows:         6
   --                 VM Work Steps:     22487216      Rows 
Modified:       0
   --                 Full Query Time:   0d 00h 00m and 01.371s
   --                 Query Result:      Success.
   -- 
------------------------------------------------------------------------------------------------

-- All-rows Query preventing the Index to cause full table scan (faster 
when the Query includes > ~90% of rows).
EXPLAIN QUERY PLAN
SELECT SUM(nbBytesDecompOut+nbBytesCompIn) as vol, portLan as item
   FROM flows
  WHERE +timestamp BETWEEN 1383770600 AND 1384770600 AND protocol IN (17, 6)
  GROUP BY portLan
  ORDER BY vol DESC LIMIT 6;

   -- selectid | order | from | detail
   -- -------- | ----- | ---- | ------------------------------
   --     0    |   0   |   0  | SCAN TABLE flows
   --     0    |   0   |   0  | USE TEMP B-TREE FOR GROUP BY
   --     0    |   0   |   0  | USE TEMP B-TREE FOR ORDER BY


SELECT SUM(nbBytesDecompOut+nbBytesCompIn) as vol, portLan as item
   FROM flows
  WHERE +timestamp BETWEEN 1383770600 AND 1384770600 AND protocol IN (17, 6)
  GROUP BY portLan
  ORDER BY vol DESC LIMIT 6;

   --      vol     |     item
   -- ------------ | ------------
   --  2783898050  |     33722
   --  1374153827  |     33736
   --   886842830  |     39155
   --   655809252  |     51800
   --   363040479  |     53153
   --   358988337  |     59757

   --    Item Stats:  Item No:           7             Query Size 
(Chars):  207
   --                 Result Columns:    2 Result Rows:         6
   --                 VM Work Steps:     22487214      Rows 
Modified:       0
   --                 Full Query Time:   0d 00h 00m and 00.954s
   --                 Query Result:      Success.
   -- 
------------------------------------------------------------------------------------------------

-- Smallish subset of rows using the Index (Faster).
SELECT SUM(nbBytesDecompOut+nbBytesCompIn) as vol, portLan as item
   FROM flows
  WHERE timestamp BETWEEN 1384749000 AND 1384770600 AND protocol IN (17, 6)
  GROUP BY portLan
  ORDER BY vol DESC LIMIT 6;

   --     vol     |   item
   -- ----------- | -------
   --  358983409  |  59757
   --   58342593  |  49245
   --   47269969  |  59607
   --   43424671  |  38931
   --   40937031  |  54032
   --   34347145  |  60048

   --    Item Stats:  Item No:           8             Query Size 
(Chars):  260
   --                 Result Columns:    2 Result Rows:         6
   --                 VM Work Steps:     3918782       Rows 
Modified:       0
   --                 Full Query Time:   0d 00h 00m and 00.275s
   --                 Query Result:      Success.
   -- 
------------------------------------------------------------------------------------------------

-- Smallish subset of rows through a table scan (Slower).
SELECT SUM(nbBytesDecompOut+nbBytesCompIn) as vol, portLan as item
   FROM flows
  WHERE +timestamp BETWEEN 1384749000 AND 1384770600 AND protocol IN (17, 6)
  GROUP BY portLan
  ORDER BY vol DESC LIMIT 6;

   --     vol     |   item
   -- ----------- | -------
   --  358983409  |  59757
   --   58342593  |  49245
   --   47269969  |  59607
   --   43424671  |  38931
   --   40937031  |  54032
   --   34347145  |  60048

   --    Item Stats:  Item No:           9             Query Size 
(Chars):  266
   --                 Result Columns:    2 Result Rows:         6
   --                 VM Work Steps:     6455004       Rows 
Modified:       0
   --                 Full Query Time:   0d 00h 00m and 00.510s
   --                 Query Result:      Success.
   -- 
------------------------------------------------------------------------------------------------


   --   Script Stats: Total Script Execution Time:     0d 00h 00m and 
03.144s
   --                 Total Script Query Time:         0d 00h 00m and 
03.112s
   --                 Total Database Rows Changed:     0
   --                 Total Virtual-Machine Steps: 55348274
   --                 Last executed Item Index:        9
   --                 Last Script Error:
   -- 
------------------------------------------------------------------------------------------------

   -- 2015-04-13 14:31:56.405  |  [Success]    Script Success.
   -- 2015-04-13 14:31:56.405  |  [Success]    Transaction Rolled back.
   -- -------  DB-Engine Logs (Contains logged information from all DB 
connections during run)  ------
   -- [2015-04-13 14:31:53.248] APPLICATION : Script 
D:\Documents\SQLiteAutoScript.sql started at 14:31:53.248 on 13 April.
   -- 
================================================================================================


       Pragma Setting  |  Value
----------------------+------------------------------------------
       application_id  :  0
          auto_vacuum  :  0
      automatic_index  :  1
         busy_timeout  :  20
           cache_size  :  2000
      compile_options  : 
ENABLE_COLUMN_METADATA,ENABLE_FTS3,ENABLE_RTREE,SYSTEM_MALLOC,THREADSAFE=1
       collation_list  :  0,1,2
   defer_foreign_keys  :  0
             encoding  :  UTF-8
         foreign_keys  :  1
       freelist_count  :  0
   incremental vacuum  :  1024
         journal_mode  :  truncate
   journal_size_limit  :  -1
       max_page_count  :  1073741823
           page_count  :  139436
            page_size  :  1024
     read_uncommitted  :  0
   recursive_triggers  :  0
        secure_delete  :  0
         user_version  :  0


Best of luck,
Ryan

Reply via email to