On 16-10-16 12:00, Cecil Westerhof wrote:
I have defined the following table:
     CREATE TABLE messages (
         date    TEXT NOT NULL DEFAULT CURRENT_DATE,
         time    TEXT NOT NULL DEFAULT CURRENT_TIME,
         type    TEXT NOT NULL,
         message    TEXT NOT NULL,

         PRIMARY KEY (date, time, type)
     );
     CREATE INDEX messages_date ON messages(date);
     CREATE INDEX messages_time ON messages(time);
     CREATE INDEX messages_type ON messages(type);

And the following view:
     CREATE VIEW temperatureStatistics AS
     SELECT   date         AS Date
     ,        MIN(message) AS Minimum
     ,        MAX(message) AS Maximum
     ,        AVG(message) AS Average
     ,        COUNT(*)     AS Count
     FROM     messages
     WHERE    type = 'cpu-temp'
     GROUP BY date

I also created the folowing two queries:
     SELECT   date         AS Date
     ,        MIN(message) AS Minimum
     ,        MAX(message) AS Maximum
     ,        AVG(message) AS Average
     ,        COUNT(*)     AS Count
     FROM     messages
     WHERE    type = 'cpu-temp'
          AND date BETWEEN (SELECT date('now', '-7 day'))
                       AND (SELECT date('now', '-1 day'))
     GROUP BY date
     ORDER BY date DESC

and:
     SELECT   *
     FROM     temperatureStatistics
     WHERE    date BETWEEN (SELECT date('now', '-7 day'))
                       AND (SELECT date('now', '-1 day'))
     ORDER BY date DESC

But the first one is about three times as fast as the second one. What
am I doing wrong here?


Because your second query has to build the complete view before it can decide if a result is between the selected dates?
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to